Skip to content

Commit

Permalink
CHG: [droid] bump targetsdk to 26 (handle runtime security)
Browse files Browse the repository at this point in the history
  • Loading branch information
koying committed Feb 2, 2018
1 parent 2163f48 commit 89b55ee
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 12 deletions.
2 changes: 1 addition & 1 deletion tools/android/packaging/xbmc/AndroidManifest.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="22" />
android:targetSdkVersion="26" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
Expand Down
2 changes: 1 addition & 1 deletion tools/android/packaging/xbmc/build.gradle.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ android {
defaultConfig {
applicationId "@APP_PACKAGE@"
minSdkVersion 21
targetSdkVersion 22
targetSdkVersion 26
versionCode @APP_VERSION_CODE@
versionName "@APP_VERSION@"
}
Expand Down
105 changes: 95 additions & 10 deletions tools/android/packaging/xbmc/src/activities/Splash.java.in
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
{
Expand All @@ -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;
Expand All @@ -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 = "";
Expand All @@ -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
Expand All @@ -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:
Expand All @@ -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);
Expand All @@ -140,6 +181,8 @@ public class Splash extends Activity
else
{
SetupEnvironment();
MigrateUserData();

if (mState == InError)
{
sendEmptyMessage(InError);
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 89b55ee

Please sign in to comment.