• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.tv.settings.device.apps;
18 
19 import android.annotation.Nullable;
20 import android.app.Activity;
21 import android.app.Fragment;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.content.pm.ApplicationInfo;
25 import android.content.pm.PackageManager;
26 import android.os.Bundle;
27 import android.os.Handler;
28 import android.os.storage.VolumeInfo;
29 import android.support.annotation.NonNull;
30 import android.util.Log;
31 import android.widget.Toast;
32 
33 import com.android.tv.settings.device.storage.MoveAppProgressFragment;
34 import com.android.tv.settings.device.storage.MoveAppStepFragment;
35 
36 public class MoveAppActivity extends Activity implements MoveAppStepFragment.Callback {
37 
38     private static final String TAG = "MoveAppActivity";
39 
40     private static final String SAVE_STATE_MOVE_ID = "MoveAppActivity.moveId";
41 
42     private static final String ARG_PACKAGE_NAME = "packageName";
43     private static final String ARG_PACKAGE_DESC = "packageDesc";
44 
45     private PackageManager mPackageManager;
46     private int mAppMoveId = -1;
47     private final PackageManager.MoveCallback mMoveCallback = new PackageManager.MoveCallback() {
48         @Override
49         public void onStatusChanged(int moveId, int status, long estMillis) {
50             if (moveId != mAppMoveId || !PackageManager.isMoveStatusFinished(status)) {
51                 return;
52             }
53 
54             finish();
55 
56             if (status != PackageManager.MOVE_SUCCEEDED) {
57                 Log.d(TAG, "Move failure status: " + status);
58                 Toast.makeText(MoveAppActivity.this,
59                         MoveAppProgressFragment.moveStatusToMessage(MoveAppActivity.this, status),
60                         Toast.LENGTH_LONG).show();
61             }
62         }
63     };
64 
getLaunchIntent(Context context, String packageName, String packageDesc)65     public static Intent getLaunchIntent(Context context, String packageName, String packageDesc) {
66         final Intent i = new Intent(context, MoveAppActivity.class);
67         i.putExtra(ARG_PACKAGE_NAME, packageName);
68         i.putExtra(ARG_PACKAGE_DESC, packageDesc);
69         return i;
70     }
71 
72     @Override
onCreate(@ullable Bundle savedInstanceState)73     protected void onCreate(@Nullable Bundle savedInstanceState) {
74         super.onCreate(savedInstanceState);
75 
76         mPackageManager = getPackageManager();
77         mPackageManager.registerMoveCallback(mMoveCallback, new Handler());
78 
79         if (savedInstanceState != null) {
80             mAppMoveId = savedInstanceState.getInt(SAVE_STATE_MOVE_ID);
81         } else {
82             final String packageDesc = getIntent().getStringExtra(ARG_PACKAGE_DESC);
83             final String packageName = getIntent().getStringExtra(ARG_PACKAGE_NAME);
84 
85             final Fragment fragment = MoveAppStepFragment.newInstance(packageName, packageDesc);
86             getFragmentManager().beginTransaction()
87                     .add(android.R.id.content, fragment)
88                     .commit();
89         }
90     }
91 
92     @Override
onSaveInstanceState(@onNull Bundle outState)93     protected void onSaveInstanceState(@NonNull Bundle outState) {
94         super.onSaveInstanceState(outState);
95         outState.putInt(SAVE_STATE_MOVE_ID, mAppMoveId);
96     }
97 
98     @Override
onDestroy()99     protected void onDestroy() {
100         super.onDestroy();
101         mPackageManager.unregisterMoveCallback(mMoveCallback);
102     }
103 
104     @Override
onRequestMovePackageToVolume(String packageName, VolumeInfo destination)105     public void onRequestMovePackageToVolume(String packageName, VolumeInfo destination) {
106         mAppMoveId = mPackageManager.movePackage(packageName, destination);
107         final ApplicationInfo applicationInfo;
108         try {
109             applicationInfo = mPackageManager
110                     .getApplicationInfo(packageName, 0);
111         } catch (final PackageManager.NameNotFoundException e) {
112             throw new IllegalStateException(e);
113         }
114 
115         final MoveAppProgressFragment fragment = MoveAppProgressFragment
116                 .newInstance(mPackageManager.getApplicationLabel(applicationInfo));
117 
118         getFragmentManager().beginTransaction()
119                 .replace(android.R.id.content, fragment)
120                 .commit();
121     }
122 
123 }
124