• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.companiondevicemanager;
18 
19 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
20 
21 import static java.util.Objects.requireNonNull;
22 
23 import android.app.Activity;
24 import android.companion.SystemDataTransferRequest;
25 import android.content.Intent;
26 import android.os.Bundle;
27 import android.os.ResultReceiver;
28 import android.text.Html;
29 import android.util.Log;
30 import android.view.View;
31 import android.widget.Button;
32 import android.widget.ListView;
33 import android.widget.TextView;
34 
35 /**
36  * This activity manages the UI of companion device data transfer.
37  */
38 public class CompanionDeviceDataTransferActivity extends Activity {
39 
40     private static final String LOG_TAG = CompanionDeviceDataTransferActivity.class.getSimpleName();
41 
42     // UI -> SystemDataTransferProcessor
43     private static final int RESULT_CODE_SYSTEM_DATA_TRANSFER_ALLOWED = 0;
44     private static final int RESULT_CODE_SYSTEM_DATA_TRANSFER_DISALLOWED = 1;
45     private static final String EXTRA_SYSTEM_DATA_TRANSFER_REQUEST = "system_data_transfer_request";
46     private static final String EXTRA_SYSTEM_DATA_TRANSFER_RESULT_RECEIVER =
47             "system_data_transfer_result_receiver";
48 
49     private SystemDataTransferRequest mRequest;
50     private ResultReceiver mCdmServiceReceiver;
51 
52     @Override
onCreate(Bundle savedInstanceState)53     public void onCreate(Bundle savedInstanceState) {
54         super.onCreate(savedInstanceState);
55 
56         Log.i(LOG_TAG, "Creating UI for data transfer confirmation.");
57 
58         getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
59 
60         setContentView(R.layout.data_transfer_confirmation);
61 
62         TextView titleView = findViewById(R.id.title);
63         TextView summaryView = findViewById(R.id.summary);
64         ListView listView = findViewById(R.id.device_list);
65         listView.setVisibility(View.GONE);
66         Button allowButton = findViewById(R.id.btn_positive);
67         Button disallowButton = findViewById(R.id.btn_negative);
68 
69         final Intent intent = getIntent();
70         mRequest = intent.getParcelableExtra(EXTRA_SYSTEM_DATA_TRANSFER_REQUEST);
71         mCdmServiceReceiver = intent.getParcelableExtra(EXTRA_SYSTEM_DATA_TRANSFER_RESULT_RECEIVER);
72 
73         requireNonNull(mRequest);
74         requireNonNull(mCdmServiceReceiver);
75 
76         if (mRequest.isPermissionSyncAllPackages()
77                 || !mRequest.getPermissionSyncPackages().isEmpty()) {
78             titleView.setText(Html.fromHtml(getString(
79                     R.string.permission_sync_confirmation_title), 0));
80             summaryView.setText(getString(R.string.permission_sync_summary));
81             allowButton.setOnClickListener(v -> allow());
82             disallowButton.setOnClickListener(v -> disallow());
83         }
84     }
85 
allow()86     private void allow() {
87         Log.i(LOG_TAG, "allow()");
88 
89         sendDataToReceiver(RESULT_CODE_SYSTEM_DATA_TRANSFER_ALLOWED);
90 
91         setResultAndFinish(RESULT_CODE_SYSTEM_DATA_TRANSFER_ALLOWED);
92     }
93 
disallow()94     private void disallow() {
95         Log.i(LOG_TAG, "disallow()");
96 
97         sendDataToReceiver(RESULT_CODE_SYSTEM_DATA_TRANSFER_DISALLOWED);
98 
99         setResultAndFinish(RESULT_CODE_SYSTEM_DATA_TRANSFER_DISALLOWED);
100     }
101 
sendDataToReceiver(int cdmResultCode)102     private void sendDataToReceiver(int cdmResultCode) {
103         Bundle data = new Bundle();
104         data.putParcelable(EXTRA_SYSTEM_DATA_TRANSFER_REQUEST, mRequest);
105         mCdmServiceReceiver.send(cdmResultCode, data);
106     }
107 
setResultAndFinish(int cdmResultCode)108     private void setResultAndFinish(int cdmResultCode) {
109         setResult(cdmResultCode == RESULT_CODE_SYSTEM_DATA_TRANSFER_ALLOWED
110                 ? RESULT_OK : RESULT_CANCELED);
111         finish();
112     }
113 }
114