Merge pull request #380 from Thunder07/android_permission

Android permission
This commit is contained in:
jpd002 2016-02-09 23:11:14 -05:00
commit dd246fa625
6 changed files with 93 additions and 60 deletions

View File

@ -3,4 +3,6 @@ package com.virtualapplications.play;
public class Constants
{
public static String TAG = "Play!";
public static final int READ_WRITE_PERMISSION = 0;
}

View File

@ -5,8 +5,8 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
@ -20,7 +20,7 @@ import com.virtualapplications.play.database.IndexingDB;
import java.io.FileNotFoundException;
public class GameInfoEditActivity extends ActionBarActivity {
public class GameInfoEditActivity extends AppCompatActivity {
private final int SELECT_PHOTO = 1003;
private Intent intent;

View File

@ -1,16 +1,18 @@
package com.virtualapplications.play;
import android.Manifest;
import android.app.*;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.*;
import android.content.pm.*;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.*;
import android.preference.PreferenceManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.*;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
@ -23,17 +25,17 @@ import android.widget.GridView;
import android.widget.TextView;
import android.support.v4.widget.DrawerLayout;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.text.*;
import java.util.*;
import java.util.zip.*;
import org.apache.commons.lang3.StringUtils;
import com.virtualapplications.play.database.GameIndexer;
import com.virtualapplications.play.database.GameInfo;
import com.virtualapplications.play.database.SqliteHelper.Games;
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks
import static com.virtualapplications.play.ThemeManager.getThemeColor;
public class MainActivity extends AppCompatActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks
{
static Activity mActivity;
private int currentOrientation;
@ -48,8 +50,8 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF
private int sortMethod = SORT_NONE;
private String navSubtitle;
@Override
protected void onCreate(Bundle savedInstanceState)
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//Log.w(Constants.TAG, "MainActivity - onCreate");
@ -64,6 +66,37 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF
setContentView(R.layout.main);
}
// if (isAndroidTV(this)) {
// // Load the menus for Android TV
// } else {
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
toolbar.bringToFront();
setUIcolor();
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
int attributeResourceId = getThemeColor(this, R.attr.colorPrimaryDark);
findViewById(R.id.navigation_drawer).setBackgroundColor(Color.parseColor(
("#" + Integer.toHexString(attributeResourceId)).replace("#ff", "#8e")
));
// }
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.READ_WRITE_PERMISSION);
} else {
Startup();
}
}
private void Startup() {
NativeInterop.setFilesDirPath(Environment.getExternalStorageDirectory().getAbsolutePath());
EmulatorActivity.RegisterPreferences();
@ -73,30 +106,6 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF
NativeInterop.createVirtualMachine();
}
// if (isAndroidTV(this)) {
// // Load the menus for Android TV
// } else {
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
toolbar.bringToFront();
setUIcolor();
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
TypedArray a = getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getColor(0, 0);
a.recycle();
findViewById(R.id.navigation_drawer).setBackgroundColor(Color.parseColor(
("#" + Integer.toHexString(attributeResourceId)).replace("#ff", "#8e")
));
// }
gameInfo = new GameInfo(MainActivity.this);
getContentResolver().call(Games.GAMES_URI, "importDb", null, null);
@ -105,14 +114,42 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF
onNavigationDrawerItemSelected(sortMethod);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case Constants.READ_WRITE_PERMISSION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Startup();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Permission Request");
builder.setMessage("Please Grant Permission,\nWithout Read/Write Permission, PLAY! wouldn't be able to find your games or save your progress.");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
finish();
}
}
);
AlertDialog dialog = builder.create();
dialog.show();
}
return;
}
}
}
private void setUIcolor(){
View content = findViewById(R.id.content_frame) ;
if (content != null) {
int[] colors = new int[2];// you can increase array size to add more colors to gradient.
TypedArray a = getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimary});
int topgradientcolor = a.getColor(0, 0);
int topgradientcolor = getThemeColor(this, R.attr.colorPrimary);
a.recycle();
float[] hsv = new float[3];
Color.colorToHSV(topgradientcolor, hsv);
hsv[2] *= 0.8f;// make it darker
@ -125,9 +162,7 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF
GradientDrawable gradientbg = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);
content.setBackground(gradientbg);
}
TypedArray a = getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getColor(0, 0);
a.recycle();
int attributeResourceId = getThemeColor(this, R.attr.colorPrimaryDark);
findViewById(R.id.navigation_drawer).setBackgroundColor(Color.parseColor(
("#" + Integer.toHexString(attributeResourceId)).replace("#ff", "#8e")
));

View File

@ -5,15 +5,14 @@ import android.app.Activity;
import android.app.Fragment;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -25,6 +24,8 @@ import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import static com.virtualapplications.play.ThemeManager.getThemeColor;
/**
* Fragment used for managing interactions for and presentation of a navigation drawer.
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
@ -90,7 +91,7 @@ public class NavigationDrawerFragment extends Fragment {
setHasOptionsMenu(true);
mDrawerListView.setAdapter(new ArrayAdapter<>(
((ActionBarActivity) getActivity()).getSupportActionBar().getThemedContext(),
((AppCompatActivity) getActivity()).getSupportActionBar().getThemedContext(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
new String[]{
@ -102,14 +103,13 @@ public class NavigationDrawerFragment extends Fragment {
//highlight on startup, every other way returns null.
mDrawerListView.post(new Runnable() {
public void run() {
TypedArray a = getActivity().getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getColor(0, 0);
int attributeResourceId = getThemeColor(getActivity(), R.attr.colorPrimaryDark);
mDrawerListView.getChildAt(mCurrentSelectedPosition).setBackgroundColor(attributeResourceId);
}
});
mDrawerListView_bottom.setAdapter(new ArrayAdapter<>(
((ActionBarActivity) getActivity()).getSupportActionBar().getThemedContext(),
((AppCompatActivity) getActivity()).getSupportActionBar().getThemedContext(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
new String[]{
@ -159,7 +159,7 @@ public class NavigationDrawerFragment extends Fragment {
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view with items and click listener
android.support.v7.app.ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
android.support.v7.app.ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
@ -168,7 +168,7 @@ public class NavigationDrawerFragment extends Fragment {
// between the navigation drawer and the action bar app icon.
mDrawerToggle = new ActionBarDrawerToggle(
(ActionBarActivity) getActivity(), /* host Activity */
(AppCompatActivity) getActivity(), /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
@ -226,9 +226,7 @@ public class NavigationDrawerFragment extends Fragment {
mDrawerListView.setItemChecked(position, true);
for (int i = 0; i < mDrawerListView.getChildCount(); i++) {
if(position == i ){
//TODO: colour is hardcoded, try getting from theme
TypedArray a = getActivity().getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getColor(0, 0);
int attributeResourceId = getThemeColor(getActivity(), R.attr.colorPrimaryDark);
mDrawerListView.getChildAt(i).setBackgroundColor(attributeResourceId);
}else{
mDrawerListView.getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
@ -309,9 +307,7 @@ public class NavigationDrawerFragment extends Fragment {
public void onResume(){
super.onResume();
if (mDrawerListView != null) {
//TODO: colour is hardcoded, try getting from theme
TypedArray a = getActivity().getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getColor(0, 0);
int attributeResourceId = getThemeColor(getActivity(), R.attr.colorPrimaryDark);
View v = mDrawerListView.getChildAt(mCurrentSelectedPosition);
if (v != null)
v.setBackgroundColor(attributeResourceId);
@ -324,7 +320,7 @@ public class NavigationDrawerFragment extends Fragment {
* 'context', rather than just what's in the current screen.
*/
private void showGlobalContextActionBar() {
android.support.v7.app.ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
android.support.v7.app.ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setSubtitle("Navigation");

View File

@ -1,10 +1,10 @@
package com.virtualapplications.play;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.WindowManager;
public class ThemeManager
@ -58,12 +58,12 @@ public class ThemeManager
activity.getWindow().setStatusBarColor(color);
}
}
static int getThemeColor(Activity activity, int attribute)
{
TypedArray a = activity.getTheme().obtainStyledAttributes(new int[] { attribute });
int attributeColor = a.getColor(0, 0);
a.recycle();
return attributeColor;
TypedValue typedValue = new TypedValue();
activity.getTheme().resolveAttribute(attribute, typedValue, true);
int color = typedValue.data;
return color;
}
}

View File

@ -3,7 +3,7 @@
package="com.virtualapplications.play"
android:versionCode="24"
android:versionName="0.30">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />