• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.packageinstaller;
18 
19 import android.app.Activity;
20 import android.content.ActivityNotFoundException;
21 import android.content.Intent;
22 import android.content.pm.ApplicationInfo;
23 import android.content.pm.PackageManager;
24 import android.content.pm.ResolveInfo;
25 import android.net.Uri;
26 import android.os.Bundle;
27 import android.support.annotation.Nullable;
28 import android.util.Log;
29 import android.widget.Button;
30 
31 import java.io.File;
32 import java.util.List;
33 
34 /**
35  * Finish installation: Return status code to the caller or display "success" UI to user
36  */
37 public class InstallSuccess extends Activity {
38     private static final String LOG_TAG = InstallSuccess.class.getSimpleName();
39 
40     @Override
onCreate(@ullable Bundle savedInstanceState)41     protected void onCreate(@Nullable Bundle savedInstanceState) {
42         super.onCreate(savedInstanceState);
43 
44         if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
45             // Return result if requested
46             Intent result = new Intent();
47             result.putExtra(Intent.EXTRA_INSTALL_RESULT, PackageManager.INSTALL_SUCCEEDED);
48             setResult(Activity.RESULT_OK, result);
49             finish();
50         } else {
51             Intent intent = getIntent();
52             ApplicationInfo appInfo =
53                     intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
54             Uri packageURI = intent.getData();
55 
56             setContentView(R.layout.install_success);
57 
58             // Set header icon and title
59             PackageUtil.AppSnippet as;
60             PackageManager pm = getPackageManager();
61 
62             if ("package".equals(packageURI.getScheme())) {
63                 as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
64                         pm.getApplicationIcon(appInfo));
65             } else {
66                 File sourceFile = new File(packageURI.getPath());
67                 as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
68             }
69 
70             PackageUtil.initSnippetForNewApp(this, as, R.id.app_snippet);
71 
72             // Set up "done" button
73             findViewById(R.id.done_button).setOnClickListener(view -> {
74                 if (appInfo.packageName != null) {
75                     Log.i(LOG_TAG, "Finished installing " + appInfo.packageName);
76                 }
77                 finish();
78             });
79 
80             // Enable or disable "launch" button
81             Intent launchIntent = getPackageManager().getLaunchIntentForPackage(
82                     appInfo.packageName);
83             boolean enabled = false;
84             if (launchIntent != null) {
85                 List<ResolveInfo> list = getPackageManager().queryIntentActivities(launchIntent,
86                         0);
87                 if (list != null && list.size() > 0) {
88                     enabled = true;
89                 }
90             }
91 
92             Button launchButton = (Button)findViewById(R.id.launch_button);
93             if (enabled) {
94                 launchButton.setOnClickListener(view -> {
95                     try {
96                         startActivity(launchIntent);
97                     } catch (ActivityNotFoundException | SecurityException e) {
98                         Log.e(LOG_TAG, "Could not start activity", e);
99                     }
100                     finish();
101                 });
102             } else {
103                 launchButton.setEnabled(false);
104             }
105         }
106     }
107 }
108