OSDN Git Service

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.
[android-x86/frameworks-base.git] / packages / EasterEgg / src / com / android / egg / neko / NekoDialog.java
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14
15 package com.android.egg.neko;
16
17 import android.support.annotation.NonNull;
18 import android.app.Dialog;
19 import android.content.Context;
20 import android.support.v7.widget.GridLayoutManager;
21 import android.support.v7.widget.RecyclerView;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 import android.widget.ImageView;
26 import android.widget.TextView;
27
28 import com.android.egg.R;
29 import com.android.internal.logging.MetricsLogger;
30
31 import java.util.ArrayList;
32
33 public class NekoDialog extends Dialog {
34
35     private final Adapter mAdapter;
36
37     public NekoDialog(@NonNull Context context) {
38         super(context, android.R.style.Theme_Material_Dialog_NoActionBar);
39         RecyclerView view = new RecyclerView(getContext());
40         mAdapter = new Adapter(getContext());
41         view.setLayoutManager(new GridLayoutManager(getContext(), 2));
42         view.setAdapter(mAdapter);
43         final float dp = context.getResources().getDisplayMetrics().density;
44         final int pad = (int)(16*dp);
45         view.setPadding(pad, pad, pad, pad);
46         setContentView(view);
47     }
48
49     private void onFoodSelected(Food food) {
50         PrefState prefs = new PrefState(getContext());
51         int currentState = prefs.getFoodState();
52         if (currentState == 0 && food.getType() != 0) {
53             NekoService.registerJob(getContext(), food.getInterval(getContext()));
54         }
55         MetricsLogger.histogram(getContext(), "egg_neko_offered_food", food.getType());
56         prefs.setFoodState(food.getType());
57         dismiss();
58     }
59
60     private class Adapter extends RecyclerView.Adapter<Holder> {
61
62         private final Context mContext;
63         private final ArrayList<Food> mFoods = new ArrayList<>();
64
65         public Adapter(Context context) {
66             mContext = context;
67             int[] foods = context.getResources().getIntArray(R.array.food_names);
68             // skip food 0, you can't choose it
69             for (int i=1; i<foods.length; i++) {
70                 mFoods.add(new Food(i));
71             }
72         }
73
74         @Override
75         public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
76             return new Holder(LayoutInflater.from(parent.getContext())
77                     .inflate(R.layout.food_layout, parent, false));
78         }
79
80         @Override
81         public void onBindViewHolder(final Holder holder, int position) {
82             final Food food = mFoods.get(position);
83             ((ImageView) holder.itemView.findViewById(R.id.icon))
84                     .setImageIcon(food.getIcon(mContext));
85             ((TextView) holder.itemView.findViewById(R.id.text))
86                     .setText(food.getName(mContext));
87             holder.itemView.setOnClickListener(new View.OnClickListener() {
88                 @Override
89                 public void onClick(View v) {
90                     onFoodSelected(mFoods.get(holder.getAdapterPosition()));
91                 }
92             });
93         }
94
95         @Override
96         public int getItemCount() {
97             return mFoods.size();
98         }
99     }
100
101     public static class Holder extends RecyclerView.ViewHolder {
102
103         public Holder(View itemView) {
104             super(itemView);
105         }
106     }
107 }