Browse Source

隐私政策和权限设置调整

huyuguo 4 years ago
parent
commit
3158c4254a

+ 25 - 20
app/src/main/AndroidManifest.xml

2
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
    xmlns:tools="http://schemas.android.com/tools"
3
    xmlns:tools="http://schemas.android.com/tools"
4
    package="com.electric.chargingpile"
4
    package="com.electric.chargingpile"
5
    android:versionCode="95"
6
    android:versionName="3.5.7">
5
    android:versionCode="96"
6
    android:versionName="3.5.8">
7
7
8
    <uses-permission android:name="android.permission.BLUETOOTH" />
8
    <uses-permission android:name="android.permission.BLUETOOTH" />
9
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
9
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
81
            android:screenOrientation="portrait">
81
            android:screenOrientation="portrait">
82
            <intent-filter>
82
            <intent-filter>
83
                <action android:name="android.intent.action.MAIN" />
83
                <action android:name="android.intent.action.MAIN" />
84
85
                <category android:name="android.intent.category.LAUNCHER" />
84
                <category android:name="android.intent.category.LAUNCHER" />
86
            </intent-filter>
85
            </intent-filter>
87
        </activity>
86
        </activity>
88
        <activity
87
        <activity
88
            android:name=".activity.PermissionAgreementActivity"
89
            android:screenOrientation="portrait"></activity>
90
        <activity
89
            android:name=".activity.CarModelActivity"
91
            android:name=".activity.CarModelActivity"
90
            android:launchMode="singleTop"
92
            android:launchMode="singleTop"
91
            android:screenOrientation="portrait" />
93
            android:screenOrientation="portrait" />
809
        <!-- Rich push 核心功能 since 2.0.6-->
811
        <!-- Rich push 核心功能 since 2.0.6-->
810
        <activity
812
        <activity
811
            android:name="cn.jpush.android.ui.PopWinActivity"
813
            android:name="cn.jpush.android.ui.PopWinActivity"
812
            android:theme="@style/MyDialogStyle"
813
            android:exported="false">
814
        </activity>
814
            android:exported="false"
815
            android:theme="@style/MyDialogStyle"></activity>
815
816
816
        <!-- Required SDK核心功能-->
817
        <!-- Required SDK核心功能-->
817
        <activity
818
        <activity
818
            android:name="cn.jpush.android.ui.PushActivity"
819
            android:name="cn.jpush.android.ui.PushActivity"
819
            android:configChanges="orientation|keyboardHidden"
820
            android:configChanges="orientation|keyboardHidden"
820
            android:theme="@android:style/Theme.NoTitleBar"
821
            android:exported="false">
821
            android:exported="false"
822
            android:theme="@android:style/Theme.NoTitleBar">
822
            <intent-filter>
823
            <intent-filter>
823
                <action android:name="cn.jpush.android.ui.PushActivity" />
824
                <action android:name="cn.jpush.android.ui.PushActivity" />
825
824
                <category android:name="android.intent.category.DEFAULT" />
826
                <category android:name="android.intent.category.DEFAULT" />
825
                <category android:name="${applicationId}" />
827
                <category android:name="${applicationId}" />
826
            </intent-filter>
828
            </intent-filter>
841
843
842
        <!-- since 3.0.9 Required SDK 核心功能-->
844
        <!-- since 3.0.9 Required SDK 核心功能-->
843
        <provider
845
        <provider
844
            android:authorities="${applicationId}.DataProvider"
845
            android:name="cn.jpush.android.service.DataProvider"
846
            android:name="cn.jpush.android.service.DataProvider"
846
            android:process=":pushcore"
847
            android:authorities="${applicationId}.DataProvider"
847
            android:exported="false"
848
            android:exported="false"
848
            />
849
            android:process=":pushcore" />
849
850
850
        <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
851
        <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
851
        <!-- 若不启用该功能可删除该组件,或把 enabled 设置成 false ;App 不会被其他 App 拉起,但会拉起其他的 App。 -->
852
        <!-- 若不启用该功能可删除该组件,或把 enabled 设置成 false ;App 不会被其他 App 拉起,但会拉起其他的 App。 -->
860
        </service>
861
        </service>
861
862
862
        <!-- 可选,如果使用静态Activity方式拉起,该组件必须声明 -->
863
        <!-- 可选,如果使用静态Activity方式拉起,该组件必须声明 -->
863
        <activity android:name="cn.jpush.android.service.DActivity"
864
        <activity
865
            android:name="cn.jpush.android.service.DActivity"
864
            android:enabled="true"
866
            android:enabled="true"
865
            android:exported="true"
867
            android:exported="true"
866
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
867
            android:taskAffinity="jpush.custom">
868
            android:taskAffinity="jpush.custom"
869
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
868
            <intent-filter>
870
            <intent-filter>
869
                <action android:name="cn.jpush.android.intent.DActivity"/>
871
                <action android:name="cn.jpush.android.intent.DActivity" />
870
                <category android:name="${applicationId}" />
872
                <category android:name="${applicationId}" />
871
            </intent-filter>
873
            </intent-filter>
872
        </activity>
874
        </activity>
885
887
886
        <!-- since 3.1.0 Required SDK 核心功能-->
888
        <!-- since 3.1.0 Required SDK 核心功能-->
887
        <provider
889
        <provider
888
            android:authorities="${applicationId}.DownloadProvider"
889
            android:name="cn.jpush.android.service.DownloadProvider"
890
            android:name="cn.jpush.android.service.DownloadProvider"
890
            android:exported="true"
891
            />
891
            android:authorities="${applicationId}.DownloadProvider"
892
            android:exported="true" />
892
893
893
        <!-- Required SDK核心功能-->
894
        <!-- Required SDK核心功能-->
894
        <receiver
895
        <receiver
912
        </receiver>
913
        </receiver>
913
914
914
        <!-- Required SDK核心功能-->
915
        <!-- Required SDK核心功能-->
915
        <receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/>
916
        <receiver
917
            android:name="cn.jpush.android.service.AlarmReceiver"
918
            android:exported="false" />
916
919
917
        <!-- 3.5.0新增,用于定时展示功能 -->
920
        <!-- 3.5.0新增,用于定时展示功能 -->
918
        <receiver android:name="cn.jpush.android.service.SchedulerReceiver" android:exported="false"/>
921
        <receiver
922
            android:name="cn.jpush.android.service.SchedulerReceiver"
923
            android:exported="false" />
919
924
920
925
921
        <meta-data
926
        <meta-data

+ 126 - 0
app/src/main/java/com/electric/chargingpile/activity/PermissionAgreementActivity.java

1
package com.electric.chargingpile.activity;
2
3
4
import android.Manifest;
5
import android.app.Activity;
6
import android.content.Intent;
7
import android.os.Bundle;
8
import android.view.View;
9
import android.widget.TextView;
10
import androidx.annotation.NonNull;
11
import com.electric.chargingpile.R;
12
import com.electric.chargingpile.manager.ProfileManager;
13
import com.electric.chargingpile.util.BarColorUtil;
14
import com.electric.chargingpile.util.SystemTypeUtil;
15
import com.electric.chargingpile.view.AlertDialogCommon;
16
import java.util.List;
17
import pub.devrel.easypermissions.AfterPermissionGranted;
18
import pub.devrel.easypermissions.EasyPermissions;
19
20
public class PermissionAgreementActivity extends Activity implements EasyPermissions.PermissionCallbacks {
21
22
    private static final int RC_PHONE_PERM = 100;
23
    private static final int RC_STORAGE_PERM = 101;
24
25
    @Override
26
    protected void onCreate(Bundle savedInstanceState) {
27
        super.onCreate(savedInstanceState);
28
        setContentView(R.layout.activity_permission_agreement);
29
        ProfileManager.getInstance().setKeyPermissionAgreement(PermissionAgreementActivity.this, true);
30
        BarColorUtil.initStatusBarColor(PermissionAgreementActivity.this);
31
        initView();
32
    }
33
34
    private void initView() {
35
        TextView agreement_btn = findViewById(R.id.agreement_btn);
36
        agreement_btn.setOnClickListener(new View.OnClickListener() {
37
            @Override
38
            public void onClick(View v) {
39
                requestPhonePermission();
40
            }
41
        });
42
    }
43
44
    @AfterPermissionGranted(RC_PHONE_PERM)
45
    private void requestPhonePermission() {
46
        if (isPhonePermissionOK()) {
47
            requestStoragePermission();
48
        } else {
49
            EasyPermissions.requestPermissions(
50
                    this, "为保证您正常、安全的使用充电桩,需要获取您的电话使用权限,请允许。",
51
                    RC_PHONE_PERM,
52
                    Manifest.permission.READ_PHONE_STATE);
53
        }
54
    }
55
56
    private boolean isPhonePermissionOK() {
57
        return EasyPermissions.hasPermissions(this,
58
                Manifest.permission.READ_PHONE_STATE
59
        );
60
    }
61
62
    @AfterPermissionGranted(RC_STORAGE_PERM)
63
    private void requestStoragePermission() {
64
        if (isStoragePermissionOK()) {
65
                startActivity(new Intent(PermissionAgreementActivity.this, WelcomeActivity.class));
66
                finish();
67
        } else {
68
            EasyPermissions.requestPermissions(
69
                    this, "为保证您正常、安全的使用充电桩,需要获取您的存储权限,请允许。",
70
                    RC_STORAGE_PERM,
71
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
72
                    Manifest.permission.READ_EXTERNAL_STORAGE);
73
        }
74
    }
75
76
    private boolean isStoragePermissionOK() {
77
        return EasyPermissions.hasPermissions(this,
78
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
79
                Manifest.permission.READ_EXTERNAL_STORAGE
80
        );
81
    }
82
83
    @Override
84
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
85
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
86
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
87
    }
88
89
    @Override
90
    public void onPermissionsGranted(int requestCode, List<String> perms) {
91
    }
92
93
    @Override
94
    public void onPermissionsDenied(int requestCode, List<String> perms) {
95
        if (requestCode == RC_PHONE_PERM) {
96
            new AlertDialogCommon(PermissionAgreementActivity.this).builder()
97
                    .setMsg("为保证您正常、安全的使用充电桩,需要获取您的电话使用权限,请允许。")
98
                    .setPositiveButton("去设置", new View.OnClickListener() {
99
                        @Override
100
                        public void onClick(View v) {
101
                            SystemTypeUtil.goToPermissionManager(PermissionAgreementActivity.this);
102
                        }
103
                    }).setNegativeButton("取消", new View.OnClickListener() {
104
                @Override
105
                public void onClick(View v) {
106
                    android.os.Process.killProcess(android.os.Process.myPid());
107
                }
108
            }).show();
109
        } else if (requestCode == RC_STORAGE_PERM) {
110
            new AlertDialogCommon(PermissionAgreementActivity.this).builder()
111
                    .setMsg("为保证您正常、安全的使用充电桩,需要获取您的存储权限,请允许。")
112
                    .setPositiveButton("去设置", new View.OnClickListener() {
113
                        @Override
114
                        public void onClick(View v) {
115
                            SystemTypeUtil.goToPermissionManager(PermissionAgreementActivity.this);
116
                        }
117
                    }).setNegativeButton("取消", new View.OnClickListener() {
118
                @Override
119
                public void onClick(View v) {
120
                    android.os.Process.killProcess(android.os.Process.myPid());
121
                }
122
            }).show();
123
        }
124
    }
125
126
}

+ 19 - 16
app/src/main/java/com/electric/chargingpile/activity/PrivacyAgreementActivity.java

11
import android.text.TextPaint;
11
import android.text.TextPaint;
12
import android.text.method.LinkMovementMethod;
12
import android.text.method.LinkMovementMethod;
13
import android.text.style.ClickableSpan;
13
import android.text.style.ClickableSpan;
14
import android.text.style.ForegroundColorSpan;
15
import android.text.style.StyleSpan;
14
import android.text.style.StyleSpan;
16
import android.view.View;
15
import android.view.View;
17
import android.view.Window;
18
import android.view.WindowManager;
19
import android.widget.Button;
16
import android.widget.Button;
20
import android.widget.TextView;
17
import android.widget.TextView;
21
import android.widget.Toast;
22
18
23
import com.electric.chargingpile.R;
19
import com.electric.chargingpile.R;
24
import com.electric.chargingpile.application.MainApplication;
25
import com.electric.chargingpile.manager.ProfileManager;
20
import com.electric.chargingpile.manager.ProfileManager;
26
import com.electric.chargingpile.util.BarColorUtil;
21
import com.electric.chargingpile.util.BarColorUtil;
27
28
import cn.jpush.android.api.JPushInterface;
22
import com.electric.chargingpile.view.AlertDialogCommon;
29
23
30
public class PrivacyAgreementActivity extends Activity {
24
public class PrivacyAgreementActivity extends Activity {
31
25
39
        if (ProfileManager.getInstance().getPrivacyAgreement(this)) {
33
        if (ProfileManager.getInstance().getPrivacyAgreement(this)) {
40
            startActivity(new Intent(PrivacyAgreementActivity.this, WelcomeActivity.class));
34
            startActivity(new Intent(PrivacyAgreementActivity.this, WelcomeActivity.class));
41
            finish();
35
            finish();
36
        } else if (ProfileManager.getInstance().getPermissionAgreement(PrivacyAgreementActivity.this)) {
37
            startActivity(new Intent(PrivacyAgreementActivity.this, PermissionAgreementActivity.class));
38
            finish();
42
        } else {
39
        } else {
43
            initView();
40
            initView();
44
        }
41
        }
47
    private void initView() {
44
    private void initView() {
48
        agree_enter_text_view = findViewById(R.id.agree_enter_text_view);
45
        agree_enter_text_view = findViewById(R.id.agree_enter_text_view);
49
46
50
        String str = "你选择「同意并进入」即表示充分阅读、理解并接受《充电桩APP用户协议和隐私政策》的全部内容"; //23-40 前包括后不包括
47
//        String str = "你选择「同意并进入」即表示充分阅读、理解并接受《充电桩APP用户协议和隐私政策》的全部内容"; //23-40 前包括后不包括
48
        String str = "如您同意《充电桩隐私政策》,请点击「同意」开始使用我们的产品和服务,我们尽全力保护您的个人信息安全"; // 4-13 前包括后不包括
51
        //超链接的块对象
49
        //超链接的块对象
52
        ClickableSpan clickableSpan = new ClickableSpan() {
50
        ClickableSpan clickableSpan = new ClickableSpan() {
53
            @Override
51
            @Override
54
            public void onClick(View widget) {
52
            public void onClick(View widget) {
55
                Intent intent = new Intent(getApplication(), MyWebViewActivity.class);
53
                Intent intent = new Intent(getApplication(), MyWebViewActivity.class);
56
                intent.putExtra("url", "http://evcharge.cc/pc/agreement.html");
54
                intent.putExtra("url", "http://evcharge.cc/pc/privacy.html");
57
                startActivity(intent);
55
                startActivity(intent);
58
            }
56
            }
59
57
70
        SpannableString span = new SpannableString(str);
68
        SpannableString span = new SpannableString(str);
71
        //设置局部效果
69
        //设置局部效果
72
        //(局部的效果对象,局部的起始位置,结束位置,包括方式) INCLUSIVE表示包裹, EXCLUSIVE不包括
70
        //(局部的效果对象,局部的起始位置,结束位置,包括方式) INCLUSIVE表示包裹, EXCLUSIVE不包括
73
        span.setSpan(clickableSpan, 23, 40, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);//此处为前包括后不包括
74
        span.setSpan(new StyleSpan(Typeface.BOLD), 3, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
71
        span.setSpan(clickableSpan, 4, 13, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);//此处为前包括后不包括
72
        span.setSpan(new StyleSpan(Typeface.BOLD), 18, 20, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
75
        //将文本特效设置到文本框中
73
        //将文本特效设置到文本框中
76
        agree_enter_text_view.setText(span, TextView.BufferType.SPANNABLE);
74
        agree_enter_text_view.setText(span, TextView.BufferType.SPANNABLE);
77
        //设置触摸监听的解析对象
75
        //设置触摸监听的解析对象
82
        agreement_btn.setOnClickListener(new View.OnClickListener() {
80
        agreement_btn.setOnClickListener(new View.OnClickListener() {
83
            @Override
81
            @Override
84
            public void onClick(View v) {
82
            public void onClick(View v) {
85
                startActivity(new Intent(PrivacyAgreementActivity.this, WelcomeActivity.class));
83
                startActivity(new Intent(PrivacyAgreementActivity.this, PermissionAgreementActivity.class));
86
                finish();
84
                finish();
87
            }
85
            }
88
        });
86
        });
89
87
90
        Button exit_btn = findViewById(R.id.exit_btn);
91
        exit_btn.setOnClickListener(new View.OnClickListener() {
88
        Button disagreement_btn = findViewById(R.id.disagreement_btn);
89
        disagreement_btn.setOnClickListener(new View.OnClickListener() {
92
            @Override
90
            @Override
93
            public void onClick(View v) {
91
            public void onClick(View v) {
94
                android.os.Process.killProcess(android.os.Process.myPid());
92
                new AlertDialogCommon(PrivacyAgreementActivity.this).builder()
93
                        .setMsg("您需要同意《充电桩隐私协议》方可使用本软件")
94
                        .setPositiveButton("知道了", new View.OnClickListener() {
95
                            @Override
96
                            public void onClick(View v) {
97
                            }
98
                        }).show();
95
            }
99
            }
96
        });
100
        });
97
    }
101
    }
98
99
}
102
}

+ 10 - 115
app/src/main/java/com/electric/chargingpile/activity/WelcomeActivity.java

48
import com.electric.chargingpile.util.DES3;
48
import com.electric.chargingpile.util.DES3;
49
import com.electric.chargingpile.util.JsonUtils;
49
import com.electric.chargingpile.util.JsonUtils;
50
import com.electric.chargingpile.util.OkHttpUtil;
50
import com.electric.chargingpile.util.OkHttpUtil;
51
import com.electric.chargingpile.util.SystemTypeUtil;
51
import com.electric.chargingpile.view.AlertDialogTwo;
52
import com.electric.chargingpile.view.AlertDialogTwo;
52
import com.electric.chargingpile.view.ViewPagerAdapter;
53
import com.electric.chargingpile.view.ViewPagerAdapter;
53
import com.google.gson.Gson;
54
import com.google.gson.Gson;
84
import pub.devrel.easypermissions.AfterPermissionGranted;
85
import pub.devrel.easypermissions.AfterPermissionGranted;
85
import pub.devrel.easypermissions.EasyPermissions;
86
import pub.devrel.easypermissions.EasyPermissions;
86

87

87
public class WelcomeActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
88
public class WelcomeActivity extends Activity implements OnClickListener {
88
    private static final String TAG = "WelcomeActivity";
89
    private static final String TAG = "WelcomeActivity";
89
    private ViewPager viewPager;
90
    private ViewPager viewPager;
90
    private List<View> views;
91
    private List<View> views;
287
        MapsInitializer.sdcardDir = MAP_FILE_PATH;
288
        MapsInitializer.sdcardDir = MAP_FILE_PATH;
288
        mTimer = new Timer();
289
        mTimer = new Timer();
289
        if (ProfileManager.getInstance().getGuide(this)) {
290
        if (ProfileManager.getInstance().getGuide(this)) {
290
            saveTask();
291
        } else {
291
            new Handler().postDelayed(new Runnable() {
292
                @Override
293
                public void run() {
294
                    eteinit("{\"fun\":\"timer\"}");
295
                }
296
            }, 1000);
292

297

293
            cameraTask();
298
        } else {
294
            androidd.setVisibility(View.GONE);
299
            androidd.setVisibility(View.GONE);
295
            ll_1.setVisibility(View.GONE);
300
            ll_1.setVisibility(View.GONE);
296
            viewPager = (ViewPager) findViewById(R.id.viewpager);
301
            viewPager = (ViewPager) findViewById(R.id.viewpager);
318
    }
323
    }
319

324

320
    private void openNotification() {
325
    private void openNotification() {
321

322
        AlertDialog.Builder builder = new AlertDialog.Builder(WelcomeActivity.this);
326
        AlertDialog.Builder builder = new AlertDialog.Builder(WelcomeActivity.this);
323
        builder.setTitle("\"充电桩\"想给您发送通知");
327
        builder.setTitle("\"充电桩\"想给您发送通知");
324
        builder.setMessage("\"通知\"可能包括提醒、声音和图标标记。这些可以在\"设置\"中配置。");
328
        builder.setMessage("\"通知\"可能包括提醒、声音和图标标记。这些可以在\"设置\"中配置。");
326
        builder.setPositiveButton("允许", new DialogInterface.OnClickListener() {
330
        builder.setPositiveButton("允许", new DialogInterface.OnClickListener() {
327
            @Override
331
            @Override
328
            public void onClick(DialogInterface dialog, int which) {
332
            public void onClick(DialogInterface dialog, int which) {
329
                Intent localIntent = new Intent();
330
                localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
331
                if (Build.VERSION.SDK_INT >= 9) {
332
                    localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
333
                    localIntent.setData(Uri.fromParts("package", WelcomeActivity.this.getPackageName(), null));
334
                } else if (Build.VERSION.SDK_INT <= 8) {
335
                    localIntent.setAction(Intent.ACTION_VIEW);
336

337
                    localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
338

339
                    localIntent.putExtra("com.android.settings.ApplicationPkgName", WelcomeActivity.this.getPackageName());
340
                }
341
                startActivity(localIntent);
333
                SystemTypeUtil.goToPermissionManager(WelcomeActivity.this);
342
                dialog.dismiss();
334
                dialog.dismiss();
343
            }
335
            }
344
        });
336
        });
668
        });
660
        });
669
    }
661
    }
670

662

671
    @Override
672
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
673
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
674
        // EasyPermissions handles the request result.
675
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
676
    }
677

678
    @Override
679
    public void onPermissionsGranted(int requestCode, List<String> perms) {
680
        for (String s : perms) {
681
            if (s.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
682
                new Handler().postDelayed(new Runnable() {
683
                    @Override
684
                    public void run() {
685
                        eteinit("{\"fun\":\"timer\"}");
686
                    }
687
                }, 1000);
688
            }
689
            break;
690
        }
691
    }
692

693
    @Override
694
    public void onPermissionsDenied(int requestCode, List<String> perms) {
695
        for (String s : perms) {
696
            if (s.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
697
                AlertDialog.Builder builder = new AlertDialog.Builder(WelcomeActivity.this);
698
                builder.setMessage("充电桩想要获取您的相关权限,是否允许?");
699
                builder.setCancelable(false);
700
                builder.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
701
                    @Override
702
                    public void onClick(DialogInterface dialog, int which) {
703
                        EasyPermissions.requestPermissions(
704
                                WelcomeActivity.this, "充电桩想要获取您的相关权限,是否允许?",
705
                                RC_SAVE_PERM,
706
                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
707
                                Manifest.permission.READ_EXTERNAL_STORAGE);
708
                    }
709
                });
710
                builder.create().show();
711
            }
712
            break;
713
        }
714
    }
715

716
    @AfterPermissionGranted(RC_CAMERA_PERM)
717
    public void cameraTask() {
718
        if (isPermissionOK()) {
719
        } else {
720
            // Ask for one permission
721
            EasyPermissions.requestPermissions(
722
                    this, "充电桩想要获取您的相关权限,是否允许?",
723
                    RC_CAMERA_PERM,
724
                    Manifest.permission.ACCESS_FINE_LOCATION,
725
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
726
                    Manifest.permission.READ_EXTERNAL_STORAGE,
727
                    Manifest.permission.READ_PHONE_STATE);
728
        }
729
    }
730

731
    @AfterPermissionGranted(RC_SAVE_PERM)
732
    public void saveTask() {
733
        if (isSavePermissionOK()) {
734
            new Handler().postDelayed(new Runnable() {
735
                @Override
736
                public void run() {
737
                    eteinit("{\"fun\":\"timer\"}");
738
                }
739
            }, 1000);
740
            // Have permission, do the thing!
741
        } else {
742
            // Ask for one permission
743
            EasyPermissions.requestPermissions(
744
                    this, "充电桩想要获取您的相关权限,是否允许?",
745
                    RC_CAMERA_PERM,
746
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
747
                    Manifest.permission.READ_EXTERNAL_STORAGE);
748
        }
749
    }
750

751
    private boolean isPermissionOK() {
752
        return EasyPermissions.hasPermissions(this,
753
                Manifest.permission.ACCESS_FINE_LOCATION,
754
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
755
                Manifest.permission.READ_EXTERNAL_STORAGE,
756
                Manifest.permission.READ_PHONE_STATE
757
        );
758
    }
759

760
    private boolean isSavePermissionOK() {
761
        return EasyPermissions.hasPermissions(this,
762
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
763
                Manifest.permission.READ_EXTERNAL_STORAGE
764
        );
765
    }
766

767

768
    public static void DeleteFile(File file) {
663
    public static void DeleteFile(File file) {
769
        if (file.exists() == false) {
664
        if (file.exists() == false) {
770
            return;
665
            return;

+ 10 - 0
app/src/main/java/com/electric/chargingpile/manager/ProfileManager.java

14
    private static final String KEY_ID = "key_id";
14
    private static final String KEY_ID = "key_id";
15
    private static final String KEY_GUIDE = "key_guide";
15
    private static final String KEY_GUIDE = "key_guide";
16
    private static final String KEY_PRIVACY_AGREEMENT = "key_privacy_agreement";
16
    private static final String KEY_PRIVACY_AGREEMENT = "key_privacy_agreement";
17
    private static final String KEY_PRIVACY_PERMISSION = "key_privacy_permission";
17
    private static final String KEY_TYPE = "key_type";
18
    private static final String KEY_TYPE = "key_type";
18
    private static final String KEY_USERID = "key_userid";
19
    private static final String KEY_USERID = "key_userid";
19
    private static final String KEY_USERICON = "key_usericon";
20
    private static final String KEY_USERICON = "key_usericon";
582
                false);
583
                false);
583
    }
584
    }
584

585

586
    public void setKeyPermissionAgreement(Context context, boolean guide) {
587
        PreferenceManager.getInstance(context).putBoolean(KEY_PRIVACY_PERMISSION, guide);
588
    }
589

590
    public boolean getPermissionAgreement(Context context) {
591
        return PreferenceManager.getInstance(context).getBoolean(KEY_PRIVACY_PERMISSION,
592
                false);
593
    }
594

585

595

586
    public void setFirstssyd(Context context, boolean firstssyd) {
596
    public void setFirstssyd(Context context, boolean firstssyd) {
587
        PreferenceManager.getInstance(context).putBoolean(KEY_FIRSTSSYD, firstssyd);
597
        PreferenceManager.getInstance(context).putBoolean(KEY_FIRSTSSYD, firstssyd);

+ 2 - 0
app/src/main/java/com/electric/chargingpile/util/SystemTypeUtil.java

123
                e.printStackTrace();
123
                e.printStackTrace();
124
                context.startActivity(getAppDetailSettingIntent(context));
124
                context.startActivity(getAppDetailSettingIntent(context));
125
            }
125
            }
126
        } else {
127
            context.startActivity(getAppDetailSettingIntent(context));
126
        }
128
        }
127
    }
129
    }
128
130

+ 189 - 0
app/src/main/java/com/electric/chargingpile/view/AlertDialogCommon.java

1
package com.electric.chargingpile.view;
2
3
import android.app.Dialog;
4
import android.content.Context;
5
import android.text.TextUtils;
6
import android.view.Display;
7
import android.view.Gravity;
8
import android.view.LayoutInflater;
9
import android.view.View;
10
import android.view.View.OnClickListener;
11
import android.view.ViewTreeObserver;
12
import android.view.WindowManager;
13
import android.widget.FrameLayout;
14
import android.widget.LinearLayout;
15
import android.widget.LinearLayout.LayoutParams;
16
import android.widget.TextView;
17
18
import com.electric.chargingpile.R;
19
import com.electric.chargingpile.application.MainApplication;
20
import com.electric.chargingpile.util.ScreenUtils;
21
22
public class AlertDialogCommon {
23
    private Context context;
24
    private Dialog dialog;
25
    private LinearLayout lLayout_bg;
26
    private TextView txt_title;
27
    private TextView txt_msg;
28
    private TextView btn_neg;
29
    private TextView btn_pos;
30
    private View btn_line;
31
    private Display display;
32
    private boolean showTitle = false;
33
    private boolean showMsg = false;
34
    private boolean showPosBtn = false;
35
    private boolean showNegBtn = false;
36
37
    public AlertDialogCommon(Context context) {
38
        this.context = context;
39
        WindowManager windowManager = (WindowManager) context
40
                .getSystemService(Context.WINDOW_SERVICE);
41
        display = windowManager.getDefaultDisplay();
42
    }
43
44
    public AlertDialogCommon builder() {
45
        // 获取Dialog布局
46
        View view = LayoutInflater.from(context).inflate(R.layout.view_alterdialog_common, null);
47
48
        // 获取自定义Dialog布局中的控件
49
        lLayout_bg = (LinearLayout) view.findViewById(R.id.lLayout_bg);
50
        txt_title = (TextView) view.findViewById(R.id.txt_title);
51
        txt_msg = (TextView) view.findViewById(R.id.txt_msg);
52
        btn_neg = (TextView) view.findViewById(R.id.btn_neg);
53
        btn_neg.setVisibility(View.GONE);
54
        btn_pos = (TextView) view.findViewById(R.id.btn_pos);
55
        btn_pos.setVisibility(View.GONE);
56
        btn_line = (View) view.findViewById(R.id.btn_line);
57
58
        // 定义Dialog布局和参数
59
        dialog = new Dialog(context, R.style.AlertDialogStyle);
60
        dialog.setContentView(view);
61
62
        int width = (int) (ScreenUtils.getScreenWidth(MainApplication.context) * 0.75);
63
        // 调整dialog背景大小
64
        lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams(width, LayoutParams.WRAP_CONTENT));
65
        return this;
66
    }
67
68
    public AlertDialogCommon setTitle(String title) {
69
        showTitle = true;
70
        if (TextUtils.isEmpty(title)) {
71
            txt_title.setVisibility(View.GONE);
72
        } else {
73
            txt_title.setText(title);
74
            txt_title.setVisibility(View.VISIBLE);
75
        }
76
        return this;
77
    }
78
79
    public AlertDialogCommon setMsg(String msg) {
80
        showMsg = true;
81
        if (TextUtils.isEmpty(msg)) {
82
            txt_msg.setVisibility(View.GONE);
83
        } else {
84
            txt_msg.setVisibility(View.VISIBLE);
85
            txt_msg.setText(msg);
86
        }
87
        ViewTreeObserver vto = txt_msg.getViewTreeObserver();
88
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
89
            @Override
90
            public boolean onPreDraw() {
91
                int lineCount = txt_msg.getLineCount();
92
                if (lineCount == 1) {
93
                    txt_msg.setGravity(Gravity.CENTER);
94
                } else {
95
                    txt_msg.setGravity(Gravity.CENTER | Gravity.LEFT);
96
                }
97
                return true;
98
            }
99
        });
100
        return this;
101
    }
102
103
    public AlertDialogCommon setCancelable(boolean cancel) {
104
        dialog.setCancelable(cancel);
105
        return this;
106
    }
107
108
    public AlertDialogCommon setPositiveButton(String text, final OnClickListener listener) {
109
        showPosBtn = true;
110
        if (TextUtils.isEmpty(text)) {
111
            btn_pos.setVisibility(View.GONE);
112
        } else {
113
            btn_pos.setText(text);
114
            btn_pos.setVisibility(View.VISIBLE);
115
        }
116
        btn_pos.setOnClickListener(new OnClickListener() {
117
            @Override
118
            public void onClick(View v) {
119
                try {
120
                    listener.onClick(v);
121
                    dialog.dismiss();
122
                } catch (Exception e) {
123
                    e.printStackTrace();
124
                }
125
126
            }
127
        });
128
        return this;
129
    }
130
131
    public AlertDialogCommon setNegativeButton(String text, final OnClickListener listener) {
132
        showNegBtn = true;
133
        if (TextUtils.isEmpty(text)) {
134
            btn_neg.setVisibility(View.GONE);
135
            btn_line.setVisibility(View.GONE);
136
        } else {
137
            btn_neg.setText(text);
138
            btn_neg.setVisibility(View.VISIBLE);
139
            btn_line.setVisibility(View.VISIBLE);
140
        }
141
        btn_neg.setOnClickListener(new OnClickListener() {
142
            @Override
143
            public void onClick(View v) {
144
                listener.onClick(v);
145
                dialog.dismiss();
146
            }
147
        });
148
        return this;
149
    }
150
151
    private void setLayout() {
152
        if (!showPosBtn && !showNegBtn) {
153
            btn_pos.setText("确定");
154
            btn_pos.setVisibility(View.VISIBLE);
155
            btn_pos.setOnClickListener(new OnClickListener() {
156
                @Override
157
                public void onClick(View v) {
158
                    dialog.dismiss();
159
                }
160
            });
161
        }
162
163
        if (showPosBtn && showNegBtn) {
164
            btn_pos.setVisibility(View.VISIBLE);
165
            btn_neg.setVisibility(View.VISIBLE);
166
        }
167
168
        if (showPosBtn && !showNegBtn) {
169
            btn_pos.setVisibility(View.VISIBLE);
170
        }
171
172
        if (!showPosBtn && showNegBtn) {
173
            btn_neg.setVisibility(View.VISIBLE);
174
        }
175
    }
176
177
    public void show() {
178
        setLayout();
179
        dialog.show();
180
    }
181
182
    public boolean isShowing() {
183
        if (dialog.isShowing()) {
184
            return true;
185
        } else {
186
            return false;
187
        }
188
    }
189
}

BIN
app/src/main/res/drawable-hdpi/private_camera.png


+ 9 - 0
app/src/main/res/drawable/common_alert_bottom_shape.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:shape="rectangle">
4
    <!-- 圆角 -->
5
    <corners android:radius="8dp" />
6
    <!-- 边框颜色 -->
7
    <!-- 填充色 -->
8
    <solid android:color="#FFFFFF" />
9
</shape>

+ 8 - 0
app/src/main/res/drawable/privacy_disagreement_btn_shape.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:shape="rectangle">
4
5
    <corners android:radius="5dp" /> <!-- 圆角大小 -->
6
    <solid android:color="@color/white" /> <!-- 填充颜色 -->
7
    <stroke android:color="@color/ui_green" android:width="1dp"/>
8
</shape>

+ 234 - 0
app/src/main/res/layout/activity_permission_agreement.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    xmlns:app="http://schemas.android.com/apk/res-auto"
4
    xmlns:tools="http://schemas.android.com/tools"
5
    android:layout_width="match_parent"
6
    android:layout_height="match_parent"
7
    android:background="@color/white"
8
    tools:context=".activity.PrivacyAgreementActivity">
9
10
    <TextView
11
        android:id="@+id/top_title"
12
        android:layout_width="match_parent"
13
        android:layout_height="wrap_content"
14
        android:layout_marginTop="40dp"
15
        android:paddingLeft="30dp"
16
        android:paddingTop="16dp"
17
        android:paddingBottom="16dp"
18
        android:text="充电桩向您申请如下权限:"
19
        android:textSize="20sp"
20
        app:layout_constraintTop_toTopOf="parent" />
21
22
    <ScrollView
23
        android:layout_width="match_parent"
24
        android:layout_height="0dp"
25
        android:paddingLeft="20dp"
26
        android:paddingRight="20dp"
27
        app:layout_constraintBottom_toTopOf="@id/bottom_btn"
28
        app:layout_constraintTop_toBottomOf="@id/top_title">
29
30
        <LinearLayout
31
            android:layout_width="match_parent"
32
            android:layout_height="match_parent"
33
            android:orientation="vertical">
34
35
            <LinearLayout
36
                android:layout_width="match_parent"
37
                android:layout_height="wrap_content"
38
                android:background="#f7f7f7"
39
                android:orientation="vertical"
40
                android:paddingLeft="15dp"
41
                android:paddingTop="20dp"
42
                android:paddingRight="15dp">
43
44
                <LinearLayout
45
                    android:layout_width="match_parent"
46
                    android:layout_height="wrap_content">
47
48
                    <ImageView
49
                        android:layout_width="20dp"
50
                        android:layout_height="match_parent"
51
                        android:layout_marginRight="10dp"
52
                        android:src="@drawable/private_phone" />
53
54
                    <TextView
55
                        android:layout_width="wrap_content"
56
                        android:layout_height="wrap_content"
57
                        android:text="设备/电话权限"
58
                        android:textColor="#444444"
59
                        android:textSize="16sp"
60
                        android:textStyle="bold" />
61
                </LinearLayout>
62
63
                <TextView
64
                    android:layout_width="match_parent"
65
                    android:layout_height="wrap_content"
66
                    android:layout_marginLeft="30dp"
67
                    android:text="为了保证您正常、安全的使用App,获取唯一设备标识符、运营商网络等软硬件特征信息进行身份验证,防止账号信息被盗"
68
                    android:textColor="#797979"
69
                    android:textSize="14sp" />
70
71
                <View
72
                    android:layout_width="match_parent"
73
                    android:layout_height="1dp"
74
                    android:layout_marginLeft="30dp"
75
                    android:layout_marginTop="20dp"
76
                    android:layout_marginBottom="20dp"
77
                    android:background="#dddddd" />
78
            </LinearLayout>
79
80
            <LinearLayout
81
                android:layout_width="match_parent"
82
                android:layout_height="wrap_content"
83
                android:background="#f7f7f7"
84
                android:orientation="vertical"
85
                android:paddingLeft="15dp"
86
                android:paddingRight="15dp"
87
                android:paddingBottom="15dp">
88
89
                <LinearLayout
90
                    android:layout_width="match_parent"
91
                    android:layout_height="wrap_content">
92
93
                    <ImageView
94
                        android:layout_width="20dp"
95
                        android:layout_height="match_parent"
96
                        android:layout_marginRight="10dp"
97
                        android:src="@drawable/private_storage" />
98
99
                    <TextView
100
                        android:layout_width="wrap_content"
101
                        android:layout_height="wrap_content"
102
                        android:text="存储权限"
103
                        android:textColor="#444444"
104
                        android:textSize="16sp"
105
                        android:textStyle="bold" />
106
                </LinearLayout>
107
108
                <TextView
109
                    android:layout_width="match_parent"
110
                    android:layout_height="wrap_content"
111
                    android:layout_marginLeft="30dp"
112
                    android:text="实现图片或视频的缓存和使用,降低流量消耗"
113
                    android:textColor="#797979"
114
                    android:textSize="14sp" />
115
116
                <View
117
                    android:layout_width="match_parent"
118
                    android:layout_height="1dp"
119
                    android:layout_marginLeft="30dp"
120
                    android:layout_marginTop="20dp"
121
                    android:layout_marginBottom="20dp"
122
                    android:background="#dddddd" />
123
124
            </LinearLayout>
125
126
            <LinearLayout
127
                android:layout_width="match_parent"
128
                android:layout_height="wrap_content"
129
                android:background="#f7f7f7"
130
                android:orientation="vertical"
131
                android:paddingLeft="15dp"
132
                android:paddingRight="15dp">
133
134
                <LinearLayout
135
                    android:layout_width="match_parent"
136
                    android:layout_height="wrap_content">
137
138
                    <ImageView
139
                        android:layout_width="20dp"
140
                        android:layout_height="match_parent"
141
                        android:layout_marginRight="10dp"
142
                        android:src="@drawable/private_location" />
143
144
                    <TextView
145
                        android:layout_width="wrap_content"
146
                        android:layout_height="wrap_content"
147
                        android:text="位置权限"
148
                        android:textColor="#444444"
149
                        android:textSize="16sp"
150
                        android:textStyle="bold" />
151
                </LinearLayout>
152
153
                <TextView
154
                    android:layout_width="match_parent"
155
                    android:layout_height="wrap_content"
156
                    android:layout_marginLeft="30dp"
157
                    android:text="为了定位您的位置,推荐充电桩,充电桩位置路线导航"
158
                    android:textColor="#797979"
159
                    android:textSize="14sp" />
160
161
                <View
162
                    android:layout_width="match_parent"
163
                    android:layout_height="1dp"
164
                    android:layout_marginLeft="30dp"
165
                    android:layout_marginTop="20dp"
166
                    android:layout_marginBottom="20dp"
167
                    android:background="#dddddd" />
168
            </LinearLayout>
169
170
            <LinearLayout
171
                android:layout_width="match_parent"
172
                android:layout_height="wrap_content"
173
                android:background="#f7f7f7"
174
                android:orientation="vertical"
175
                android:paddingLeft="15dp"
176
                android:paddingRight="15dp">
177
178
                <LinearLayout
179
                    android:layout_width="match_parent"
180
                    android:layout_height="wrap_content">
181
182
                    <ImageView
183
                        android:layout_width="20dp"
184
                        android:layout_height="match_parent"
185
                        android:layout_marginRight="10dp"
186
                        android:src="@drawable/private_camera" />
187
188
                    <TextView
189
                        android:layout_width="wrap_content"
190
                        android:layout_height="wrap_content"
191
                        android:text="摄像头权限"
192
                        android:textColor="#444444"
193
                        android:textSize="16sp"
194
                        android:textStyle="bold" />
195
                </LinearLayout>
196
197
                <TextView
198
                    android:layout_width="match_parent"
199
                    android:layout_height="wrap_content"
200
                    android:layout_marginLeft="30dp"
201
                    android:paddingBottom="20dp"
202
                    android:text="用于扫码充电终端二维码启动充电"
203
                    android:textColor="#797979"
204
                    android:textSize="14sp" />
205
            </LinearLayout>
206
207
        </LinearLayout>
208
    </ScrollView>
209
210
    <LinearLayout
211
        android:id="@+id/bottom_btn"
212
        android:layout_width="match_parent"
213
        android:layout_height="wrap_content"
214
        android:orientation="vertical"
215
        android:paddingLeft="20dp"
216
        android:paddingTop="10dp"
217
        android:paddingRight="20dp"
218
        android:paddingBottom="40dp"
219
        app:layout_constraintBottom_toBottomOf="parent">
220
221
        <TextView
222
            android:id="@+id/agreement_btn"
223
            android:layout_width="match_parent"
224
            android:layout_height="40dp"
225
            android:layout_marginTop="15dp"
226
            android:background="@drawable/privacy_agreement_btn_shape"
227
            android:gravity="center"
228
            android:text="知道了"
229
            android:textColor="@color/white"
230
            android:textSize="14sp" />
231
232
    </LinearLayout>
233
234
</androidx.constraintlayout.widget.ConstraintLayout>

+ 56 - 168
app/src/main/res/layout/activity_privacy_agreement.xml

7
    android:background="@color/white"
7
    android:background="@color/white"
8
    tools:context=".activity.PrivacyAgreementActivity">
8
    tools:context=".activity.PrivacyAgreementActivity">
9
9
10
    <TextView
11
        android:id="@+id/top_title"
12
        android:layout_width="match_parent"
13
        android:layout_height="wrap_content"
14
        android:layout_marginTop="40dp"
15
        android:paddingLeft="30dp"
16
        android:paddingTop="16dp"
17
        android:paddingBottom="16dp"
18
        android:text="充电桩向您申请如下权限:"
19
        android:textSize="20sp"
20
        app:layout_constraintTop_toTopOf="parent" />
21
22
    <ScrollView
10
    <ScrollView
23
        android:layout_width="match_parent"
11
        android:layout_width="match_parent"
24
        android:layout_height="0dp"
12
        android:layout_height="0dp"
25
        android:paddingLeft="40dp"
26
        android:paddingRight="40dp"
13
        android:paddingLeft="20dp"
14
        android:paddingRight="20dp"
27
        app:layout_constraintBottom_toTopOf="@id/bottom_btn"
15
        app:layout_constraintBottom_toTopOf="@id/bottom_btn"
28
        app:layout_constraintTop_toBottomOf="@id/top_title">
16
        app:layout_constraintTop_toTopOf="parent">
29
17
30
        <LinearLayout
18
        <LinearLayout
31
            android:layout_width="match_parent"
19
            android:layout_width="match_parent"
32
            android:layout_height="match_parent"
20
            android:layout_height="match_parent"
33
            android:orientation="vertical">
21
            android:orientation="vertical">
34
22
35
            <LinearLayout
36
                android:layout_width="match_parent"
37
                android:layout_height="wrap_content"
38
                android:background="#f7f7f7"
39
                android:orientation="vertical"
40
                android:paddingLeft="15dp"
41
                android:paddingTop="20dp"
42
                android:paddingRight="15dp">
43
44
                <LinearLayout
45
                    android:layout_width="match_parent"
46
                    android:layout_height="wrap_content">
47
48
                    <ImageView
49
                        android:layout_width="20dp"
50
                        android:layout_height="match_parent"
51
                        android:layout_marginRight="10dp"
52
                        android:src="@drawable/private_phone" />
53
54
                    <TextView
55
                        android:layout_width="wrap_content"
56
                        android:layout_height="wrap_content"
57
                        android:text="电话权限"
58
                        android:textColor="#444444"
59
                        android:textSize="16sp"
60
                        android:textStyle="bold" />
61
                </LinearLayout>
62
63
                <TextView
64
                    android:layout_width="match_parent"
65
                    android:layout_height="wrap_content"
66
                    android:layout_marginLeft="30dp"
67
                    android:text="为了正常识别手机设备、运营商网络和本机手机号,进行手机认证、保证账号安全"
68
                    android:textColor="#797979"
69
                    android:textSize="14sp" />
70
71
                <View
72
                    android:layout_width="match_parent"
73
                    android:layout_height="1dp"
74
                    android:layout_marginLeft="30dp"
75
                    android:layout_marginTop="20dp"
76
                    android:layout_marginBottom="20dp"
77
                    android:background="#dddddd" />
78
            </LinearLayout>
79
80
            <LinearLayout
23
            <ImageView
81
                android:layout_width="match_parent"
24
                android:layout_width="match_parent"
82
                android:layout_height="wrap_content"
25
                android:layout_height="wrap_content"
83
                android:background="#f7f7f7"
84
                android:orientation="vertical"
85
                android:paddingLeft="15dp"
86
                android:paddingRight="15dp">
87
88
                <LinearLayout
89
                    android:layout_width="match_parent"
90
                    android:layout_height="wrap_content">
91
92
                    <ImageView
93
                        android:layout_width="20dp"
94
                        android:layout_height="match_parent"
95
                        android:layout_marginRight="10dp"
96
                        android:src="@drawable/private_location" />
97
98
                    <TextView
99
                        android:layout_width="wrap_content"
100
                        android:layout_height="wrap_content"
101
                        android:text="位置信息权限"
102
                        android:textColor="#444444"
103
                        android:textSize="16sp"
104
                        android:textStyle="bold" />
105
                </LinearLayout>
106
107
                <TextView
108
                    android:layout_width="match_parent"
109
                    android:layout_height="wrap_content"
110
                    android:layout_marginLeft="30dp"
111
                    android:text="为了定位您的位置,推荐充电桩,充电桩位置路线导航"
112
                    android:textColor="#797979"
113
                    android:textSize="14sp" />
114
115
                <View
116
                    android:layout_width="match_parent"
117
                    android:layout_height="1dp"
118
                    android:layout_marginLeft="30dp"
119
                    android:layout_marginTop="20dp"
120
                    android:layout_marginBottom="20dp"
121
                    android:background="#dddddd" />
122
            </LinearLayout>
123
124
            <LinearLayout
125
                android:layout_width="match_parent"
126
                android:layout_height="wrap_content"
127
                android:background="#f7f7f7"
128
                android:orientation="vertical"
129
                android:paddingLeft="15dp"
130
                android:paddingRight="15dp"
131
                android:paddingBottom="15dp">
132
133
                <LinearLayout
134
                    android:layout_width="match_parent"
135
                    android:layout_height="wrap_content">
136
137
                    <ImageView
138
                        android:layout_width="20dp"
139
                        android:layout_height="match_parent"
140
                        android:layout_marginRight="10dp"
141
                        android:src="@drawable/private_storage" />
142
143
                    <TextView
144
                        android:layout_width="wrap_content"
145
                        android:layout_height="wrap_content"
146
                        android:text="存储权限"
147
                        android:textColor="#444444"
148
                        android:textSize="16sp"
149
                        android:textStyle="bold" />
150
                </LinearLayout>
151
152
                <TextView
153
                    android:layout_width="match_parent"
154
                    android:layout_height="wrap_content"
155
                    android:layout_marginLeft="30dp"
156
                    android:text="实现图片或视频的缓存和使用,降低流量消耗"
157
                    android:textColor="#797979"
158
                    android:textSize="14sp" />
159
160
            </LinearLayout>
26
                android:layout_marginTop="40dp"
27
                android:src="@drawable/icon626" />
161
28
162
            <TextView
29
            <TextView
163
                android:layout_width="match_parent"
164
                android:layout_height="wrap_content"
165
                android:layout_marginTop="20dp"
166
                android:text="同时,充电桩采用严格的数据安全措施保护你的个人信息安全。"
167
                android:textColor="#444444"
168
                android:textSize="14sp" />
30
                android:layout_width="wrap_content"
31
                android:layout_height="match_parent"
32
                android:layout_gravity="center"
33
                android:layout_marginTop="5dp"
34
                android:text="充电桩隐私政策"
35
                android:textColor="@color/color_222222"
36
                android:textSize="24sp" />
169
37
170
            <TextView
38
            <TextView
171
                android:id="@+id/agree_enter_text_view"
172
                android:layout_width="match_parent"
39
                android:layout_width="match_parent"
173
                android:layout_height="wrap_content"
40
                android:layout_height="wrap_content"
174
                android:layout_marginTop="5dp"
175
                android:textColor="#444444"
176
                android:textSize="14sp" />
41
                android:layout_marginTop="15dp"
42
                android:text="感谢您下载充电桩应用,当您开始使用本软件时,我们可能会对您的部分个人信息进行收集、使用和共享。请您仔细阅读《充电桩隐私政策》并确定了解我们对您个人信息的处理规则,包括:"
43
                android:textColor="@color/color_222222"
44
                android:textSize="16sp" />
177
45
178
            <TextView
46
            <TextView
179
                android:layout_width="match_parent"
47
                android:layout_width="match_parent"
180
                android:layout_height="wrap_content"
48
                android:layout_height="wrap_content"
181
                android:layout_marginTop="5dp"
182
                android:text="你也可以选择「退出并关闭」,充电桩将无法为你提供产品或服务。"
183
                android:textColor="#444444"
49
                android:layout_marginTop="20dp"
50
                android:text="我们如何收集和使用您的个人信息\n我们如何使用Cookie和同类技术\n我们如何共享、转让、公开披露您的个人信息\n我们如何保护您的个人信息\n您如果管理您的个人信息\未成年人的个人信息保护\n通知和修订\n如何联系我们\n"
51
                android:textColor="@color/color_222222"
184
                android:textSize="14sp" />
52
                android:textSize="14sp" />
185
        </LinearLayout>
53
        </LinearLayout>
186
    </ScrollView>
54
    </ScrollView>
190
        android:layout_width="match_parent"
58
        android:layout_width="match_parent"
191
        android:layout_height="wrap_content"
59
        android:layout_height="wrap_content"
192
        android:orientation="vertical"
60
        android:orientation="vertical"
193
        android:paddingLeft="40dp"
61
        android:paddingLeft="20dp"
194
        android:paddingTop="20dp"
62
        android:paddingTop="20dp"
195
        android:paddingRight="40dp"
196
        android:paddingBottom="20dp"
63
        android:paddingRight="20dp"
64
        android:paddingBottom="40dp"
197
        app:layout_constraintBottom_toBottomOf="parent">
65
        app:layout_constraintBottom_toBottomOf="parent">
198
66
199
        <Button
200
            android:id="@+id/agreement_btn"
67
        <TextView
68
            android:id="@+id/agree_enter_text_view"
201
            android:layout_width="match_parent"
69
            android:layout_width="match_parent"
202
            android:layout_height="wrap_content"
70
            android:layout_height="wrap_content"
203
            android:layout_marginTop="15dp"
204
            android:background="@drawable/privacy_agreement_btn_shape"
205
            android:text="同意并进入"
206
            android:textColor="@color/white"
71
            android:text="如您同意《充电桩隐私政策》,请点击「同意」开始使用我们的产品和服务,我们尽全力保护您的个人信息安全"
72
            android:textColor="@color/color_222222"
207
            android:textSize="14sp" />
73
            android:textSize="14sp" />
208
74
209
        <Button
210
            android:id="@+id/exit_btn"
75
        <LinearLayout
211
            android:layout_width="match_parent"
76
            android:layout_width="match_parent"
212
            android:layout_height="wrap_content"
77
            android:layout_height="wrap_content"
213
            android:layout_marginTop="15dp"
214
            android:background="@color/transparent"
215
            android:text="退出并关闭 App"
216
            android:textColor="#9c9c9c"
217
            android:textSize="14sp" />
78
            android:orientation="horizontal">
79
80
81
            <Button
82
                android:id="@+id/disagreement_btn"
83
                android:layout_width="match_parent"
84
                android:layout_height="40dp"
85
                android:layout_marginTop="15dp"
86
                android:layout_marginRight="5dp"
87
                android:layout_weight="1"
88
                android:background="@drawable/privacy_disagreement_btn_shape"
89
                android:text="不同意"
90
                android:textColor="@color/ui_green"
91
                android:textSize="14sp" />
92
93
            <Button
94
                android:id="@+id/agreement_btn"
95
                android:layout_width="match_parent"
96
                android:layout_height="40dp"
97
                android:layout_marginLeft="5dp"
98
                android:layout_marginTop="15dp"
99
                android:layout_weight="1"
100
                android:background="@drawable/privacy_agreement_btn_shape"
101
                android:text="同意"
102
                android:textColor="@color/white"
103
                android:textSize="14sp" />
104
        </LinearLayout>
105
218
    </LinearLayout>
106
    </LinearLayout>
219
107
220
</androidx.constraintlayout.widget.ConstraintLayout>
108
</androidx.constraintlayout.widget.ConstraintLayout>

+ 92 - 0
app/src/main/res/layout/view_alterdialog_common.xml

1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    xmlns:app="http://schemas.android.com/apk/res-auto"
4
    xmlns:tools="http://schemas.android.com/tools"
5
    android:id="@+id/lLayout_bg"
6
    android:layout_width="272dp"
7
    android:layout_height="wrap_content"
8
    android:orientation="vertical">
9
10
    <LinearLayout
11
        android:layout_width="match_parent"
12
        android:layout_height="wrap_content"
13
        android:background="@drawable/common_alert_bottom_shape"
14
        android:orientation="vertical"
15
        android:paddingTop="20dp">
16
17
        <TextView
18
            android:id="@+id/txt_title"
19
            android:layout_width="match_parent"
20
            android:layout_height="wrap_content"
21
            android:paddingLeft="20dp"
22
            android:paddingRight="20dp"
23
            android:textAlignment="center"
24
            android:textColor="#444444"
25
            android:textSize="15sp"
26
            android:visibility="gone"
27
            tools:text="更新提示 3.5.2"
28
            tools:visibility="visible" />
29
30
        <TextView
31
            android:id="@+id/txt_msg"
32
            android:layout_width="match_parent"
33
            android:layout_height="wrap_content"
34
            android:layout_marginLeft="18dp"
35
            android:layout_marginTop="12dp"
36
            android:layout_marginRight="18dp"
37
            android:gravity="center|left"
38
            android:textColor="#444444"
39
            android:textSize="13sp"
40
            android:visibility="gone"
41
            tools:text="1-新增“聊聊”新能源车主社区版块。可以通过短图文和视频的方式,聊聊你的新能源汽车和生活\n\n2-修改已知BUG"
42
            tools:visibility="visible" />
43
44
        <View
45
            android:layout_width="match_parent"
46
            android:layout_height="1dp"
47
            android:layout_marginTop="20dp"
48
            android:background="@color/ui_line" />
49
50
        <LinearLayout
51
            android:layout_width="match_parent"
52
            android:layout_height="40dp"
53
            android:gravity="center_horizontal"
54
            android:orientation="horizontal">
55
56
            <TextView
57
                android:id="@+id/btn_neg"
58
                android:layout_width="match_parent"
59
                android:layout_height="match_parent"
60
                android:layout_weight="1"
61
                android:gravity="center"
62
                android:textColor="#999999"
63
                android:textSize="14sp"
64
                android:visibility="gone"
65
                tools:text="取消"
66
                tools:visibility="visible" />
67
68
            <View
69
                android:id="@+id/btn_line"
70
                android:layout_width="1dp"
71
                android:layout_height="match_parent"
72
                android:background="@color/ui_line"
73
                android:visibility="gone"
74
                tools:visibility="visible" />
75
76
            <TextView
77
                android:id="@+id/btn_pos"
78
                android:layout_width="match_parent"
79
                android:layout_height="match_parent"
80
                android:layout_weight="1"
81
                android:gravity="center"
82
                android:textColor="@color/ui_green"
83
                android:textSize="14sp"
84
                android:visibility="gone"
85
                tools:text="确定"
86
                tools:visibility="visible" />
87
88
        </LinearLayout>
89
    </LinearLayout>
90
91
92
</LinearLayout>