forked from koying/SPMC
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CHG: [droid] bump targetsdk to 26 (handle runtime security)
- Loading branch information
Showing
3 changed files
with
97 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,7 @@ import java.util.Properties; | |
import java.util.Enumeration; | ||
import java.util.ArrayList; | ||
|
||
import android.Manifest; | ||
import android.os.AsyncTask; | ||
import android.os.Build; | ||
import android.os.Bundle; | ||
|
@@ -46,6 +47,7 @@ import android.os.Environment; | |
|
||
import @[email protected]; | ||
import @[email protected]; | ||
import static android.content.pm.PackageManager.PERMISSION_GRANTED; | ||
|
||
public class Splash extends Activity | ||
{ | ||
|
@@ -57,8 +59,11 @@ public class Splash extends Activity | |
private static final int Clearing = 4; | ||
private static final int Caching = 5; | ||
private static final int CachingDone = 6; | ||
private static final int CheckExternalStorage = 11; | ||
private static final int WaitingStorageChecked = 7; | ||
private static final int StorageChecked = 8; | ||
private static final int CheckingPermissions = 9; | ||
private static final int CheckingPermissionsDone = 10; | ||
private static final int DownloadingObb = 90; | ||
private static final int DownloadObbDone = 91; | ||
private static final int StartingService = 97; | ||
|
@@ -67,6 +72,8 @@ public class Splash extends Activity | |
|
||
private static final String TAG = "@APP_NAME@"; | ||
|
||
private static final int PERMISSION_RESULT_CODE = 8947; | ||
|
||
private String mCpuinfo = ""; | ||
private ArrayList<String> mMounts = new ArrayList<String>(); | ||
private String mErrorMsg = ""; | ||
|
@@ -88,6 +95,7 @@ public class Splash extends Activity | |
private BroadcastReceiver mServiceReceiver = null; | ||
private boolean mServiceChecked = false; | ||
private boolean mCachingDone = false; | ||
private boolean mPermissionOK = false; | ||
private boolean mInstallLibs = false; | ||
|
||
private class StateMachine extends Handler | ||
|
@@ -110,6 +118,23 @@ public class Splash extends Activity | |
case InError: | ||
showErrorDialog(mSplash, "Error", mErrorMsg); | ||
break; | ||
case CheckingPermissions: | ||
mSplash.mTextView.setText("Asking permissions..."); | ||
mSplash.mProgress.setVisibility(View.INVISIBLE); | ||
|
||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, | ||
PERMISSION_RESULT_CODE); | ||
break; | ||
case CheckingPermissionsDone: | ||
if (mPermissionOK) | ||
sendEmptyMessage(CheckExternalStorage); | ||
else | ||
{ | ||
mErrorMsg = "Permission denied!! Exiting..."; | ||
sendEmptyMessage(InError); | ||
break; | ||
} | ||
break; | ||
case Checking: | ||
break; | ||
case Clearing: | ||
|
@@ -122,11 +147,27 @@ public class Splash extends Activity | |
new FillCache(mSplash).execute(); | ||
break; | ||
case Caching: | ||
if (!mCachingDone) | ||
new FillCache(mSplash).execute(); | ||
else | ||
mStateMachine.sendEmptyMessage(CachingDone); | ||
break; | ||
case CachingDone: | ||
mSplash.mCachingDone = true; | ||
sendEmptyMessage(StartingService); | ||
break; | ||
case CheckExternalStorage: | ||
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) | ||
{ | ||
mExternalStorageChecked = true; | ||
sendEmptyMessage(StorageChecked); | ||
} | ||
else | ||
{ | ||
startWatchingExternalStorage(); | ||
sendEmptyMessage(WaitingStorageChecked); | ||
} | ||
break; | ||
case WaitingStorageChecked: | ||
mSplash.mTextView.setText("Waiting for external storage..."); | ||
mSplash.mProgress.setVisibility(View.INVISIBLE); | ||
|
@@ -140,6 +181,8 @@ public class Splash extends Activity | |
else | ||
{ | ||
SetupEnvironment(); | ||
MigrateUserData(); | ||
|
||
if (mState == InError) | ||
{ | ||
sendEmptyMessage(InError); | ||
|
@@ -716,6 +759,40 @@ public class Splash extends Activity | |
return m.find(); | ||
} | ||
|
||
private boolean CheckPermissions() | ||
{ | ||
boolean retVal = false; | ||
if (android.os.Build.VERSION.SDK_INT > 22) | ||
{ | ||
int permissionCheck; | ||
permissionCheck = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); | ||
if (permissionCheck == PERMISSION_GRANTED) | ||
retVal = true; | ||
} | ||
else | ||
retVal= true; | ||
|
||
return retVal; | ||
} | ||
|
||
@Override | ||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) | ||
{ | ||
switch (requestCode) | ||
{ | ||
case PERMISSION_RESULT_CODE: | ||
{ | ||
// If request is cancelled, the result arrays are empty. | ||
if (grantResults.length > 0 | ||
&& grantResults[0] == PERMISSION_GRANTED) | ||
{ | ||
mPermissionOK = true; | ||
} | ||
} | ||
} | ||
mStateMachine.sendEmptyMessage(CheckingPermissionsDone); | ||
} | ||
|
||
void updateExternalStorageState() | ||
{ | ||
String state = Environment.getExternalStorageState(); | ||
|
@@ -906,21 +983,29 @@ public class Splash extends Activity | |
if (Service.isStarted()) | ||
mServiceChecked = true; | ||
|
||
if (mState != InError && mExternalStorageChecked) | ||
mPermissionOK = CheckPermissions(); | ||
if (!mPermissionOK) | ||
{ | ||
mState = CheckingPermissions; | ||
} | ||
else | ||
{ | ||
mState = ChecksDone; | ||
if (mState != InError && mExternalStorageChecked) | ||
{ | ||
mState = ChecksDone; | ||
|
||
SetupEnvironment(); | ||
MigrateUserData(); | ||
SetupEnvironment(); | ||
MigrateUserData(); | ||
|
||
if ((mState != DownloadingObb && mState != InError) && fXbmcHome.exists() && fXbmcHome.lastModified() >= fPackagePath.lastModified() && !mInstallLibs) | ||
{ | ||
mState = CachingDone; | ||
mCachingDone = true; | ||
if ((mState != DownloadingObb && mState != InError) && fXbmcHome.exists() && fXbmcHome.lastModified() >= fPackagePath.lastModified() && !mInstallLibs) | ||
{ | ||
mState = CachingDone; | ||
mCachingDone = true; | ||
} | ||
} | ||
} | ||
|
||
if ((mState != DownloadingObb && mState != InError) && mCachingDone && mExternalStorageChecked && mServiceChecked) | ||
if ((mState != DownloadingObb && mState != InError) && mCachingDone && mExternalStorageChecked && mServiceChecked && mPermissionOK) | ||
{ | ||
startXBMC(); | ||
return; | ||
|
@@ -930,7 +1015,7 @@ public class Splash extends Activity | |
mProgress = (ProgressBar) findViewById(R.id.progressBar1); | ||
mTextView = (TextView) findViewById(R.id.textView1); | ||
|
||
if (mState == DownloadingObb || mState == InError) | ||
if (mState == DownloadingObb || mState == InError || mState == CheckingPermissions) | ||
{ | ||
mStateMachine.sendEmptyMessage(mState); | ||
return; | ||
|