summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2016-03-22 21:30:02 +0300
committerAndrew Dolgov <[email protected]>2016-03-22 21:30:02 +0300
commit68131f8821953751f24eeb368794c077bf233387 (patch)
tree9415e8015dfee50231ee389cc8b4aba423eb0c1a /org.fox.ttcomics
parentb7e46e915d0d84d1625746d4c36090144fb7a2c4 (diff)
implement permissions in a mostly functional way
Diffstat (limited to 'org.fox.ttcomics')
-rwxr-xr-xorg.fox.ttcomics/src/main/AndroidManifest.xml4
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java55
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java157
-rwxr-xr-xorg.fox.ttcomics/src/main/res/values/strings.xml2
4 files changed, 136 insertions, 82 deletions
diff --git a/org.fox.ttcomics/src/main/AndroidManifest.xml b/org.fox.ttcomics/src/main/AndroidManifest.xml
index b74a4d3..41943f0 100755
--- a/org.fox.ttcomics/src/main/AndroidManifest.xml
+++ b/org.fox.ttcomics/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttcomics2"
- android:versionCode="70"
- android:versionName="1.28" >
+ android:versionCode="71"
+ android:versionName="1.29" >
<uses-sdk
android:minSdkVersion="19"
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
index 26fe186..caf1761 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
@@ -34,7 +34,7 @@ public class CommonActivity extends AppCompatActivity {
protected final static int REQUEST_SHARE = 1;
protected static final int REQUEST_VIEWCOMIC = 2;
- protected static final int REQUEST_PERMISSION_READ_EXTERNAL_STORAGE = 3;
+ protected static final int REQUEST_PERMISSIONS_RESULT = 3;
public static final long MAX_CACHE_SIZE = 100 * 1024 * 1024; // bytes
@@ -66,37 +66,40 @@ public class CommonActivity extends AppCompatActivity {
}
m_prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-
- initSync();
+
}
@Override
public void onResume() {
super.onResume();
+ }
- initSync();
+ public boolean isSyncEnabled() {
+ return m_prefs.getBoolean("use_position_sync", false);
}
-
- private void initSync() {
- if (m_prefs.getBoolean("use_position_sync", false)) {
- String googleAccount = getGoogleAccount(this);
-
- if (googleAccount != null) {
- m_syncClient.setOwner(googleAccount);
- } else {
- if (BuildConfig.DEBUG) {
- m_syncClient.setOwner("TEST-ACCOUNT");
-
- //toast(R.string.sync_running_in_test_mode);
- } else {
- m_syncClient.setOwner(null);
- toast(R.string.error_sync_no_account);
-
- SharedPreferences.Editor editor = m_prefs.edit();
- editor.putBoolean("use_position_sync", false);
- editor.apply();
- }
- }
+
+ protected void initSyncClient() {
+ if (isSyncEnabled()) {
+
+ String googleAccount = getGoogleAccount(this);
+
+ if (googleAccount != null) {
+ m_syncClient.setOwner(googleAccount);
+ } else {
+ if (BuildConfig.DEBUG) {
+ m_syncClient.setOwner("TEST-ACCOUNT");
+
+ //toast(R.string.sync_running_in_test_mode);
+ } else {
+ m_syncClient.setOwner(null);
+ toast(R.string.error_sync_no_account);
+
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putBoolean("use_position_sync", false);
+ editor.apply();
+ }
+ }
+
} else {
m_syncClient.setOwner(null);
}
@@ -107,7 +110,7 @@ public class CommonActivity extends AppCompatActivity {
}
- public void onComicSelected(String fileName, int position) {
+ public void onComicSelected(String fileName, int position) {
m_databaseHelper.setLastPosition(fileName, position);
}
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
index 409e06d..8a961f2 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
@@ -17,7 +17,6 @@ import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
-import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
@@ -27,6 +26,7 @@ import org.fox.ttcomics2.sync.SyncClient;
import org.fox.ttcomics2.sync.SyncFolderService;
import java.io.File;
+import java.util.ArrayList;
import java.util.Arrays;
import it.neokree.materialtabs.MaterialTab;
@@ -67,19 +67,19 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ super.onCreate(savedInstanceState);
m_prefs.registerOnSharedPreferenceChangeListener(this);
- setContentView(R.layout.activity_main);
+ setContentView(R.layout.activity_main);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
- setTitle(R.string.app_name);
+ setTitle(R.string.app_name);
m_progressDialog = new ProgressDialog(this);
tabHost = (MaterialTabHost) this.findViewById(R.id.materialTabHost);
- if (savedInstanceState == null) {
+ if (savedInstanceState == null) {
m_selectedTab = getIntent().getIntExtra("selectedTab", 0);
//Log.d(TAG, "selTab=" + m_selectedTab);
@@ -87,9 +87,9 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
ComicListFragment frag = new ComicListFragment();
frag.setMode(m_selectedTab);
- if (getIntent().getStringExtra("baseDir") != null) {
- frag.setBaseDirectory(getIntent().getStringExtra("baseDir"));
- } else {
+ if (getIntent().getStringExtra("baseDir") != null) {
+ frag.setBaseDirectory(getIntent().getStringExtra("baseDir"));
+ } else {
frag.setBaseDirectory(m_prefs.getString("comics_directory", ""));
}
@@ -97,47 +97,118 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
ft.replace(R.id.comics_list, frag, FRAG_COMICS_LIST);
ft.commit();
} else {
- //m_baseDirectory = savedInstanceState.getString("baseDir");
- }
+ //m_baseDirectory = savedInstanceState.getString("baseDir");
+ }
m_selectedTab = -1;
- tabHost.addTab(tabHost.newTab()
- .setText(getString(R.string.tab_all_comics))
- .setTabListener(this));
+ tabHost.addTab(tabHost.newTab()
+ .setText(getString(R.string.tab_all_comics))
+ .setTabListener(this));
- tabHost.addTab(tabHost.newTab()
- .setText(getString(R.string.tab_unread))
- .setTabListener(this));
+ tabHost.addTab(tabHost.newTab()
+ .setText(getString(R.string.tab_unread))
+ .setTabListener(this));
- tabHost.addTab(tabHost.newTab()
- .setText(getString(R.string.tab_unfinished))
- .setTabListener(this));
+ tabHost.addTab(tabHost.newTab()
+ .setText(getString(R.string.tab_unfinished))
+ .setTabListener(this));
- tabHost.addTab(tabHost.newTab()
- .setText(getString(R.string.tab_read))
- .setTabListener(this));
+ tabHost.addTab(tabHost.newTab()
+ .setText(getString(R.string.tab_read))
+ .setTabListener(this));
- if (savedInstanceState != null) {
- m_selectedTab = savedInstanceState.getInt("selectedTab");
- } else {
- m_selectedTab = getIntent().getIntExtra("selectedTab", 0);
- }
+ if (savedInstanceState != null) {
+ m_selectedTab = savedInstanceState.getInt("selectedTab");
+ } else {
+ m_selectedTab = getIntent().getIntExtra("selectedTab", 0);
+ }
- if (m_selectedTab != -1)
- tabHost.setSelectedNavigationItem(m_selectedTab);
+ if (m_selectedTab != -1)
+ tabHost.setSelectedNavigationItem(m_selectedTab);
- if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ String[] permissions;
+
+ if (isSyncEnabled()) {
+ permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.GET_ACCOUNTS};
+ } else {
+ permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};
+ }
+
+ String[] needPermissions = checkPermissions(permissions);
+
+ if (needPermissions.length > 0) {
ActivityCompat.requestPermissions(this,
- new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
- REQUEST_PERMISSION_READ_EXTERNAL_STORAGE);
+ needPermissions,
+ REQUEST_PERMISSIONS_RESULT);
} else {
+ initSyncClient();
setupDefaultDirectory();
}
+
+ }
+
+ protected String[] checkPermissions(String[] permissions) {
+ ArrayList<String> tmp = new ArrayList<String>();
+
+ for (String permission : permissions) {
+ if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
+ Log.d(TAG, "need permission: " + permission);
+
+ tmp.add(permission);
+ }
+ }
+
+ return tmp.toArray(new String[tmp.size()]);
}
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ String permissions[], int[] grantResults) {
+
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ switch (requestCode) {
+ case REQUEST_PERMISSIONS_RESULT:
+ if (grantResults.length > 0) {
+ boolean needRestart = false;
+
+ for (int i = 0; i < grantResults.length; i++) {
+ String permission = permissions[i];
+
+ if (Manifest.permission.READ_EXTERNAL_STORAGE.equals(permission)) {
+ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+ needRestart = true;
+ } else {
+ toast(R.string.permission_denied_storage);
+ }
+ }
+
+ if (Manifest.permission.GET_ACCOUNTS.equals(permission)) {
+ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+ needRestart = true;
+ } else {
+ toast(R.string.permission_denied_accounts);
+
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putBoolean("use_position_sync", false);
+ editor.apply();
+ }
+ }
+ }
+
+ if (needRestart) {
+ android.os.Process.killProcess(android.os.Process.myPid());
+ }
+ }
+
+ return;
+ }
+ }
+
+
private void setupDefaultDirectory() {
if (m_prefs.getString("comics_directory", null) == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -161,28 +232,6 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
}
@Override
- public void onRequestPermissionsResult(int requestCode,
- String permissions[], int[] grantResults) {
- switch (requestCode) {
- case REQUEST_PERMISSION_READ_EXTERNAL_STORAGE: {
- // If request is cancelled, the result arrays are empty.
- if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-
- // TODO workaround for android 6.0 bug, maybe needs to be removed in the future
-
- android.os.Process.killProcess(android.os.Process.myPid());
-
- } else {
- toast("Storage permission denied, the app might not be able to access your comic archives.");
- }
-
- return;
- }
- }
- }
-
- @Override
public void onResume() {
super.onResume();
diff --git a/org.fox.ttcomics/src/main/res/values/strings.xml b/org.fox.ttcomics/src/main/res/values/strings.xml
index 34cc230..509bf54 100755
--- a/org.fox.ttcomics/src/main/res/values/strings.xml
+++ b/org.fox.ttcomics/src/main/res/values/strings.xml
@@ -72,4 +72,6 @@
<string name="reset_progress">Reset progress</string>
<string name="menu_open">Open…</string>
<string name="menu_sync_directory">Synchronize directory</string>
+ <string name="permission_denied_storage">Storage permission denied, app might not be able to access your comic archives.</string>
+ <string name="permission_denied_accounts">Accounts permission denied, sync disabled</string>
</resources> \ No newline at end of file