Add Games stub service

Games proxy service (chimera) yet to be done for full Play Games support
This commit is contained in:
mar-v-in 2015-10-23 01:40:50 +02:00
parent ba57628fc9
commit d22e231b44
11 changed files with 562 additions and 8 deletions

2
extern/GmsApi vendored

@ -1 +1 @@
Subproject commit d2b942d87f5b5d0547e7e5f279bcc734d69cdef4
Subproject commit 4f6a84de9d95fef255579c5ce06a89363dc05aa8

View File

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="299.98224"
height="299.67419"
viewBox="0 0 299.98226 299.6742"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_gamepad.svg"
inkscape:export-filename="/home/marvin/Development/IDEA/microg_gradle_build_root/play-services-core/src/main/res/drawable-xxhdpi/ic_gamepad.png"
inkscape:export-xdpi="43.202557"
inkscape:export-ydpi="43.202557">
<defs
id="defs4">
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter4067"
x="-0.5"
y="-0.5"
width="2"
height="2">
<feFlood
flood-opacity="1"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood4069" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite4071" />
<feGaussianBlur
in="composite"
stdDeviation="6"
result="blur"
id="feGaussianBlur4073" />
<feComponentTransfer
id="feComponentTransfer13">
<feFuncA
type="linear"
slope="0.2"
id="feFuncA15" />
</feComponentTransfer>
<feOffset
dx="0"
dy="6"
result="offset"
id="feOffset4075"
stdDeviation="8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite4077" />
</filter>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4266">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4268"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4270">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4272"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4274">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4276"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4278">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4280"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4282">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4284"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4286">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4288"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4290">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4292"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4294">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 354.99922,92.361314 c -29.48241,0 -53.85,21.058586 -58.98632,49.011716 l -0.0234,-0.004 -19.10156,108.32813 a 24.999997,24.999997 0 0 0 20.27929,28.96094 24.999997,24.999997 0 0 0 22.00977,-6.94922 l 0.01,0.008 0.19141,-0.19336 44.16406,-44.16211 102.91407,0 44.16406,44.16211 0.1914,0.19336 0.0117,-0.008 a 24.999997,24.999997 0 0 0 22.00782,6.94922 24.999997,24.999997 0 0 0 20.27929,-28.96094 l -19.09961,-108.32813 -0.004,0 -0.0195,0.004 C 528.85138,113.4199 504.48183,92.361314 474.99941,92.361314 l -119.99804,0 -0.002,0 z"
id="path4296"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="177.50974"
inkscape:cy="142.62777"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-left="11.5"
fit-margin-right="11.5"
fit-margin-top="56.5"
fit-margin-bottom="56.5"
units="px" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-265.00899,-35.861337)">
<path
style="opacity:1;fill:#689f38;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 534.00781,141.36914 -49.24023,8.68164 0.4082,2.31055 -190.17578,0 0,75 171.45703,0 44.16406,44.16211 0.19141,0.19336 0.01,-0.008 a 25,25 0 0 0 22.00976,6.94922 25,25 0 0 0 20.2793,-28.96093 L 534.01,141.36896 l -0.002,0 z"
id="rect4154"
inkscape:connector-curvature="0"
clip-path="url(#clipPath4294)" />
<path
style="opacity:1;fill:#8bc34a;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 355,92.361328 c -29.48242,0 -53.85001,21.058592 -58.98633,49.011722 l -0.0234,-0.004 -19.10156,108.32813 a 25,25 0 0 0 20.2793,28.96093 25,25 0 0 0 22.00976,-6.94922 l 0.008,0.008 0.1914,-0.19336 59.16407,-59.16211 96.45898,0 c 33.24,0 60,-26.76 60,-60 0,-33.24 -26.76,-60.000002 -60,-60.000002 l -120,0 z"
id="rect4152"
inkscape:connector-curvature="0"
clip-path="url(#clipPath4290)" />
<g
id="g4210"
clip-path="url(#clipPath4286)">
<path
id="rect4147"
d="m 349,122.36133 0,24 -24,0 0,16 24,0 0,24 16,0 0,-24 24,0 0,-16 -24,0 0,-24 -16,0 z"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
id="g4204">
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4158"
cx="478"
cy="174.3622"
r="10" />
<circle
r="10"
cy="132.3622"
cx="478"
id="circle4164"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle4166"
cx="458"
cy="153.8622"
r="10" />
<circle
r="10"
cy="153.8622"
cx="498"
id="circle4168"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 281.78571,250.21935 13.75,-106.07143 L 390,205.75506 321.96429,272.18363 Z"
id="path4187"
inkscape:connector-curvature="0"
clip-path="url(#clipPath4282)" />
<path
inkscape:connector-curvature="0"
id="path4159"
d="m 534.00781,141.36914 -49.24023,8.68164 0.4082,2.31055 -190.17578,0 0,75 171.45703,0 44.16406,44.16211 0.19141,0.19336 0.01,-0.008 a 25,25 0 0 0 22.00976,6.94922 25,25 0 0 0 20.2793,-28.96093 L 534.01,141.36896 l -0.002,0 z"
style="opacity:1;fill:#689f38;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;"
clip-path="url(#clipPath4278)" />
<path
inkscape:connector-curvature="0"
id="path4161"
d="m 355,92.361328 c -29.48242,0 -53.85001,21.058592 -58.98633,49.011722 l -0.0234,-0.004 -19.10156,108.32813 a 25,25 0 0 0 20.2793,28.96093 25,25 0 0 0 22.00976,-6.94922 l 0.008,0.008 0.1914,-0.19336 59.16407,-59.16211 96.45898,0 c 33.24,0 60,-26.76 60,-60 0,-33.24 -26.76,-60.000002 -60,-60.000002 l -120,0 z"
style="opacity:1;fill:#8bc34a;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4067)"
clip-path="url(#clipPath4274)" />
<g
id="g4163"
style="filter:url(#filter4067)"
clip-path="url(#clipPath4270)">
<path
inkscape:connector-curvature="0"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 349,122.36133 0,24 -24,0 0,16 24,0 0,24 16,0 0,-24 24,0 0,-16 -24,0 0,-24 -16,0 z"
id="path4165" />
<g
id="g4167">
<circle
r="10"
cy="174.3622"
cx="478"
id="circle4169"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle4171"
cx="478"
cy="132.3622"
r="10" />
<circle
r="10"
cy="153.8622"
cx="458"
id="circle4173"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:30;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle4175"
cx="498"
cy="153.8622"
r="10" />
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path4177"
d="m 281.78571,250.21935 13.75,-106.07143 L 390,205.75506 321.96429,272.18363 Z"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath4266)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -300,6 +300,26 @@
android:name=".auth.TokenActivity"
android:exported="true"/>
<!-- Games -->
<service
android:name="org.microg.gms.games.GamesStubService"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.games.service.START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
<activity
android:name="org.microg.gms.games.UpgradeActivity"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="com.google.android.gms.games.PLAY_GAMES_UPGRADE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Other -->
<service
@ -416,7 +436,6 @@
android:name="org.microg.gms.DummyService"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.games.service.START"/>
<action android:name="com.google.android.gms.plus.service.START"/>
<action android:name="com.google.android.gms.plus.service.internal.START"/>
<action android:name="com.google.android.gms.panorama.service.START"/>

View File

@ -0,0 +1,58 @@
/*
* Copyright 2013-2015 microG Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.microg.gms.games;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.RemoteException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.IGmsCallbacks;
import org.microg.gms.BaseService;
import org.microg.gms.common.Services.GAMES;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static org.microg.gms.common.Constants.GMS_PACKAGE_NAME;
import static org.microg.gms.games.UpgradeActivity.ACTION_PLAY_GAMES_UPGRADE;
import static org.microg.gms.games.UpgradeActivity.EXTRA_GAME_PACACKE_NAME;
public class GamesStubService extends BaseService {
public static final String PARAM_GAME_PACKAGE_NAME = "com.google.android.gms.games.key.gamePackageName";
public GamesStubService() {
super("GmsGamesSvc", GAMES.SERVICE_ID);
}
@Override
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
String packageName = null;
if (request.extras != null) {
packageName = request.extras.getString(PARAM_GAME_PACKAGE_NAME);
}
if (packageName == null) packageName = GMS_PACKAGE_NAME;
Intent intent = new Intent(ACTION_PLAY_GAMES_UPGRADE);
intent.setPackage(GMS_PACKAGE_NAME);
intent.putExtra(EXTRA_GAME_PACACKE_NAME, packageName);
Bundle bundle = new Bundle();
bundle.putParcelable("pendingIntent", PendingIntent.getActivity(this, packageName.hashCode(), intent, FLAG_UPDATE_CURRENT));
callback.onPostInitComplete(CommonStatusCodes.RESOLUTION_REQUIRED, null, bundle);
}
}

View File

@ -0,0 +1,73 @@
/*
* Copyright 2013-2015 microG Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.microg.gms.games;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.gms.R;
public class UpgradeActivity extends Activity {
public static final String ACTION_PLAY_GAMES_UPGRADE = "com.google.android.gms.games.PLAY_GAMES_UPGRADE";
public static final String EXTRA_GAME_PACACKE_NAME = "com.google.android.gms.games.GAME_PACKAGE_NAME";
private static final String TAG = "GmsUpgActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.games_info);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
getWindow().setAttributes(lp);
String packageName = getIntent().getStringExtra(EXTRA_GAME_PACACKE_NAME);
// receive package info
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo;
try {
applicationInfo = packageManager.getApplicationInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, e);
finish();
return;
}
CharSequence appLabel = packageManager.getApplicationLabel(applicationInfo);
Drawable appIcon = packageManager.getApplicationIcon(applicationInfo);
((ImageView) findViewById(R.id.app_icon)).setImageDrawable(appIcon);
((TextView) findViewById(R.id.title)).setText(getString(R.string.games_info_title, appLabel));
findViewById(android.R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright 2013-2015 microG Project Team
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:paddingTop="10dp"
android:text="@string/games_title"
android:textColor="?attr/colorPrimary"/>
<View
android:id="@+id/no_progress_bar"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:background="@color/dialog_border_color"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="15dp">
<FrameLayout
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginEnd="-3dp"
android:layout_marginRight="-3dp"
android:background="@drawable/circle_shape_background"
android:padding="10dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_gamepad"/>
</FrameLayout>
<FrameLayout
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginLeft="-3dp"
android:layout_marginStart="-3dp"
android:background="@drawable/circle_shape_background"
android:padding="10dp">
<ImageView
android:id="@+id/app_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/ic_core_service_app"/>
</FrameLayout>
</LinearLayout>
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:padding="15dp"
android:text="@string/games_info_title"
android:textColor="?attr/colorAccent"
android:textSize="18sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/games_info_content"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@android:id/button1"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/ok"/>
</LinearLayout>
</LinearLayout>

View File

@ -16,11 +16,15 @@
<resources>
<string name="gms_app_name">microG Services Core</string>
<string name="gms_settings_name">microG Settings</string>
<string name="google_account_type" translatable="false">com.google</string>
<string name="just_a_sec">Just a sec…</string>
<string name="google_account_label">Google</string>
<string name="ask_permission_tos">By continuing, you allow this app and Google to use your information in accordance with their respective terms of service and privacy policies.</string>
<string name="ask_scope_permission_title">%s would like to:</string>
<string name="ask_service_permission_title">%s would like to use:</string>
<string name="ask_scope_permission_title">%1$s would like to:</string>
<string name="ask_service_permission_title">%1$s would like to use:</string>
<string name="account_manager_title">Google Account Manager</string>
<string name="sorry">Sorry…</string>
<string name="no_network_error_desc">"You don't have a network connection.
@ -45,18 +49,20 @@ This can take a couple of minutes."</string>
<string name="pref_auth_trust_google_title">Trust Google for app permissions</string>
<string name="pref_auth_trust_google_summary">When disabled, the user is asked before an apps authorization request is sent to Google. Some applications will fail to use the Google account if this is disabled.</string>
<string name="prefcat_services">Background services</string>
<string name="pref_checkin_enable" translatable="false">checkin_enable_service</string>
<string name="pref_checkin_enable_title">Enable device checkin</string>
<string name="pref_checkin_enable_summary">Device checkin is a hidden process that is used to create an unique identifier for Google services. microG Services strips identifying bits other than your Google account name from this data.</string>
<string name="pref_gcm_enable_mcs" translatable="false">gcm_enable_mcs_service</string>
<string name="pref_gcm_enable_mcs_title">Enable Google Cloud Messaging</string>
<string name="pref_gcm_enable_mcs_summary">Google Cloud Messaging is a push notification provider used by many applications. To use it you must enable device checkin.</string>
<string name="prefcat_services">Background services</string>
<string name="prefcat_components">Components</string>
<string name="prefcat_location_service">Location service</string>
<string name="gms_settings_name">microG Settings</string>
<string name="google_account_type" translatable="false">com.google</string>
<string name="games_title">Google Play Games</string>
<string name="games_info_title">%1$s would like to use Play Games</string>
<string name="games_info_content">To use Play Games it is required to install the Google Play Games app. The application might continue without Play Games, but it is possible that it will behave unexpectedly.</string>
</resources>