diff --git a/apk/resources/AndroidManifest.xml b/apk/resources/AndroidManifest.xml
new file mode 100644
index 0000000..7bbe0dc
--- /dev/null
+++ b/apk/resources/AndroidManifest.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/META-INF/CERT.RSA b/apk/resources/META-INF/CERT.RSA
new file mode 100644
index 0000000..0264fb1
Binary files /dev/null and b/apk/resources/META-INF/CERT.RSA differ
diff --git a/apk/resources/META-INF/CERT.SF b/apk/resources/META-INF/CERT.SF
new file mode 100644
index 0000000..2a22d03
--- /dev/null
+++ b/apk/resources/META-INF/CERT.SF
@@ -0,0 +1,385 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: 0FDfMhYG9jU5GyMz2B6VfCQ/Kz0=
+Created-By: 1.0 (Android)
+
+Name: res/layout-xlarge-v4/row_list.xml
+SHA1-Digest: GuORvxYshn8GOZgA3WyobIsjih4=
+
+Name: res/layout/row_param_val.xml
+SHA1-Digest: I0kgV+IAHLJAL/1q5LLZcSG9j04=
+
+Name: res/layout-small-v4/row_param_ico_dis.xml
+SHA1-Digest: hd30V3IDQEvlTCaf13B1NSA/lgw=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico.xml
+SHA1-Digest: rM7sGOvZIbzGSlaqd7HC+1FhpqE=
+
+Name: res/layout-xlarge-v4/ster_param.xml
+SHA1-Digest: szQ4UtD8MH36kNeGCABZ6v/ewQk=
+
+Name: res/layout/row_param_time.xml
+SHA1-Digest: Dh/oGcCliSNgX92KXqohjY1Zu+U=
+
+Name: res/layout/row_param_val_dis.xml
+SHA1-Digest: MTDlheeOJjAdpSMmxOV6TUWbv9Y=
+
+Name: res/drawable-mdpi-v4/mail.png
+SHA1-Digest: O/JikGeOjATlQWz78wNYQ5LVPtg=
+
+Name: res/layout-xlarge-v4/aboutcomp.xml
+SHA1-Digest: nLQnkh5r+s2QIz+mMvEEVgj7UW0=
+
+Name: res/layout/aboutcomp.xml
+SHA1-Digest: EWEZYq9vsVIWBqvKkTlTsZgulyk=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: nX6ZErRr95z+23Kn+eVkaKgMhsM=
+
+Name: res/drawable-xxhdpi-v4/phone.png
+SHA1-Digest: HxtbxeJdmGISqlK2tom3kZ7JGN8=
+
+Name: res/drawable-mdpi-v4/warning.png
+SHA1-Digest: af0UdGpEvmQO+Xf9FBr/9W5LME0=
+
+Name: res/layout/ster_settings.xml
+SHA1-Digest: fgAusajJeBHht8Ie00Lr7KQymkc=
+
+Name: res/layout/ster_choose.xml
+SHA1-Digest: PekEGIUGNdyEZVUHKrVjP6K9H0I=
+
+Name: res/layout-large-v4/row_param_ico.xml
+SHA1-Digest: jQTyNn38VSqpJGbfYXyrh1zWmBo=
+
+Name: res/drawable/fb_refresh.png
+SHA1-Digest: WFM0rZbqrbohOwDh1xT8TjgarwA=
+
+Name: res/drawable/fb_new.png
+SHA1-Digest: /FC87h2sws61Id2nHdIiaUVLkMs=
+
+Name: res/drawable-mdpi-v4/www.png
+SHA1-Digest: 74F8yFL6CblwpACqQs1VUBo8rmo=
+
+Name: res/layout-xlarge-v4/row_param_list.xml
+SHA1-Digest: zpeWFVnD4jCPRAQD4SXBwzC3CIM=
+
+Name: res/layout-xlarge-v4/row_param_val_dis.xml
+SHA1-Digest: nke7RYVwcNsf12lpqk0YfOOCtIU=
+
+Name: res/drawable-hdpi-v4/www.png
+SHA1-Digest: ru/SzvowGQGcR5RdbJrBbuFezJ8=
+
+Name: res/layout/ster_update.xml
+SHA1-Digest: y8gzfemiHCBtiUzzjBUSVrKY9X8=
+
+Name: resources.arsc
+SHA1-Digest: rP/bL6Yno7xYtTxuUQIzz/JTAg0=
+
+Name: res/layout-small-v4/row_param_ico.xml
+SHA1-Digest: JRHx8EtFaYyvLBgSPiOP9RgDjZA=
+
+Name: res/layout-small-v4/spinner_dd_txt.xml
+SHA1-Digest: rxR5mquEatQKFv+2gc72I+MRdlM=
+
+Name: res/layout-small-v4/row_param_prg.xml
+SHA1-Digest: AQtxmxEPNtq0l9Wwysml7Pgn8eM=
+
+Name: AndroidManifest.xml
+SHA1-Digest: 0YN8tj3qbg/0FklnSM7lKlRHS88=
+
+Name: res/drawable/def_list_icon.png
+SHA1-Digest: dD8J6Cfq1VDEPY02xrrbO/OULiw=
+
+Name: res/layout-large-v4/row_param_val_dis.xml
+SHA1-Digest: Kab0698UW15Mx/pj9ohO606ls1A=
+
+Name: res/layout-small-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: /9F6EEmsiuoLAFyfTnY+Glvrisc=
+
+Name: res/layout/row_param_prg.xml
+SHA1-Digest: qRRfoHO7QefVAYzpyVaubTFviDI=
+
+Name: res/layout-large-v4/aboutcomp.xml
+SHA1-Digest: nS1YWILr1UvY/nmwVwjQKmwyo4A=
+
+Name: res/layout/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: 2s6/7OKqqrcq0LFLBTajOjQ8OlE=
+
+Name: res/layout-large-v4/ster_update.xml
+SHA1-Digest: ycXGRXe7Vbog3tU63cQLpTvVNJ0=
+
+Name: res/layout/row_param_ico_dis.xml
+SHA1-Digest: WswyPDivO03jjJMJnrTYQsCmm0o=
+
+Name: res/drawable/fb_normal.xml
+SHA1-Digest: r4qjMQHv8d9oDlbsl6K/2IA8zTk=
+
+Name: res/layout-large-v4/frisko_button_param.xml
+SHA1-Digest: uNlyAVyMqksMdL3J2aMQBo3uR50=
+
+Name: res/layout-large-v4/spinner_dd_txt.xml
+SHA1-Digest: 9qiGd9CgeetnR3+zi6Hasp00cSI=
+
+Name: res/layout-small-v4/row_list.xml
+SHA1-Digest: fOW5mXW5AbJ0tcq0AmNuGLK8yzE=
+
+Name: res/layout-large-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: JHVfPf76HnwYL22AwHkvCS1lMag=
+
+Name: res/layout-xlarge-v4/frisko_button.xml
+SHA1-Digest: Y4UWrdbF10aFFmxJWHLme3Z7cFg=
+
+Name: res/layout/ster_param.xml
+SHA1-Digest: B0TCCGY5PQ+6oiJ0XFWWb7fwmpQ=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: hEmSwnT+uNe1U8KBb1uVDVDGUWM=
+
+Name: res/drawable-xxhdpi-v4/www.png
+SHA1-Digest: /yfVwQup3YsShDv6N9q8O5VReqY=
+
+Name: res/layout-small-v4/ster_choose.xml
+SHA1-Digest: CBZP9btv5yo6dCGarc3Hpifyeh4=
+
+Name: res/layout/frisko_button.xml
+SHA1-Digest: 8RHAM+ApYSS0O0QCAjVZ/rsKgN8=
+
+Name: res/drawable/fb_edit.png
+SHA1-Digest: rXEhfL5eGb2FR4S54TII8kaw7AM=
+
+Name: res/drawable-hdpi-v4/warning.png
+SHA1-Digest: pW3VN/RNbKfduevW8p81XrrlPyc=
+
+Name: res/layout-xlarge-v4/row_param_prg.xml
+SHA1-Digest: znIMij3TGkh73xOk/yuHtPZXovc=
+
+Name: res/layout-large-v4/row_param_list.xml
+SHA1-Digest: L5dzbrZ5mzimQH8o6jQmHo3Imvc=
+
+Name: res/layout-small-v4/aboutcomp.xml
+SHA1-Digest: 7i1kgOPZLe1c1A839K+qNHVPlPY=
+
+Name: res/layout/spinner_dd_ico.xml
+SHA1-Digest: OyG1rA7LMKUbt9WNVeNAbhbS0TE=
+
+Name: res/layout-large-v4/row_list.xml
+SHA1-Digest: 9httEn/gxXCn539heYkvb+gaWJY=
+
+Name: res/layout-small-v4/row_param_time.xml
+SHA1-Digest: sHaqLS2gyk32m8fDgUZNAxbrQmQ=
+
+Name: res/layout-large-v4/ster_settings.xml
+SHA1-Digest: +Cc3xQGR3W8N1bnFmMOLH532ClE=
+
+Name: res/drawable-xhdpi-v4/mail.png
+SHA1-Digest: 1E9+y90pZ6cIwp5hMfqfj8Aj+IQ=
+
+Name: res/layout-small-v4/ster_settings.xml
+SHA1-Digest: vpB2Li4Jb9+UH+VOmZVGykJa/oA=
+
+Name: res/drawable-mdpi-v4/ic_launcher.png
+SHA1-Digest: Wo9w9TCUodZ4IG7sQ2x8KFyKHEU=
+
+Name: res/layout-large-v4/about.xml
+SHA1-Digest: pxYQCLB+o/YzqdfJRbtAG9ayCYA=
+
+Name: res/layout-xlarge-v4/row_param_val.xml
+SHA1-Digest: Eu+U0HvzJZqzcJY8QO2koI6zpiA=
+
+Name: res/drawable/fb_cancel.png
+SHA1-Digest: d+sJHEJ03QmDKQeuo6LQNCaWSQw=
+
+Name: res/drawable/fb_save.png
+SHA1-Digest: p7QvQheBUVgl60klOLZhDeLmu5g=
+
+Name: res/drawable/frisko.png
+SHA1-Digest: GQxDraWR4NbiY4Q1E5OKYJiEEQk=
+
+Name: res/layout/row_param_ico.xml
+SHA1-Digest: e164hGUeGza8aVWjRRIgduKB09g=
+
+Name: res/drawable-hdpi-v4/phone.png
+SHA1-Digest: s+2eYRT81fNG3jYLHZkEabMWZaw=
+
+Name: res/layout-large-v4/row_param_ico_dis.xml
+SHA1-Digest: 5nOfGrLxx1Kuy7ayXInxlszbFE0=
+
+Name: res/layout-small-v4/spinner_dd_ico.xml
+SHA1-Digest: RxDUIxpTit9fvBSjTbQdR2Mzbfo=
+
+Name: res/layout/about.xml
+SHA1-Digest: Yo0sNxjBKKPj4VCXVAr+TwAgJFs=
+
+Name: res/layout-large-v4/ster_mainmenu.xml
+SHA1-Digest: /G8UJ6o8fMLYQAPR6rzyj+u/j1Q=
+
+Name: res/layout-small-v4/row_param_val.xml
+SHA1-Digest: d4p61piwbTbyvzWs3Eb2mYl/zHY=
+
+Name: res/layout-small-v4/about.xml
+SHA1-Digest: 14HRzp/RhlLXuYsYiHVlDfLncQI=
+
+Name: res/layout-xlarge-v4/ster_settings.xml
+SHA1-Digest: phRDZlZIPMFN/kHSd7M/mK4gMbo=
+
+Name: res/drawable/fb_check.png
+SHA1-Digest: phKpsFq8WpGJ1RyH/cjyePzrOpc=
+
+Name: res/layout-large-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: XHuUKYftWQUcBidWNNsr1lxQs5k=
+
+Name: res/menu/menu_2.xml
+SHA1-Digest: D10PN2Tph24Dw5F7dkODSE5s8Ys=
+
+Name: res/drawable-xhdpi-v4/warning.png
+SHA1-Digest: WuM0JUwvDQQLHcoA87Dcdw7o4DY=
+
+Name: res/drawable-xxhdpi-v4/warning.png
+SHA1-Digest: +6oTjodOXxC2URyLv9ZyPdTzrXw=
+
+Name: res/layout/row_dd_null.xml
+SHA1-Digest: D3+rZyEDhVXPdfYq69zURlkqTS8=
+
+Name: res/layout-xlarge-v4/ster_choose.xml
+SHA1-Digest: pTYUOg4lm+uS2QEg1RdMzxYNug0=
+
+Name: res/drawable-xxhdpi-v4/mail.png
+SHA1-Digest: E9MLK4a4JSsYUb5dVkZHtEJDeRE=
+
+Name: res/layout-small-v4/frisko_button.xml
+SHA1-Digest: eD3HB2Bh/2fINM/TZfTxHsSmX2o=
+
+Name: res/drawable/fb_style.xml
+SHA1-Digest: Y3iTTB4k3ejBJD7UegH6vCQiyTU=
+
+Name: res/drawable/fb_failed.png
+SHA1-Digest: iLw9ym+RTDZaqFnT0Ps3gYXWyHo=
+
+Name: res/drawable-xhdpi-v4/ic_launcher.png
+SHA1-Digest: fWUDbU5i4FMQKVULNVc18QDDCDk=
+
+Name: res/layout-small-v4/ster_mainmenu.xml
+SHA1-Digest: 8T2X9hlUOKH0s3gm1JmSF0FRkoo=
+
+Name: res/drawable-xhdpi-v4/www.png
+SHA1-Digest: 41kumQXcXG2+nizQEd+d3KKHt10=
+
+Name: res/drawable/fb_delete.png
+SHA1-Digest: U5Ik5edCmjnwkCgNFxCy3sYzgRY=
+
+Name: res/layout-small-v4/row_param_val_dis.xml
+SHA1-Digest: uMJnk7ZwNiFm+45BhVKIhZ4P7+Y=
+
+Name: res/layout-xlarge-v4/ster_update.xml
+SHA1-Digest: bvGl+7JMrZC7KP2F7zoVA7tMu64=
+
+Name: res/drawable/fb_connect.png
+SHA1-Digest: 9k8Gau1NddGVykKHoYibaK+DpzM=
+
+Name: res/layout-large-v4/frisko_button.xml
+SHA1-Digest: wzN+d2exxWwdang50SQ7OofTUfU=
+
+Name: res/drawable-mdpi-v4/phone.png
+SHA1-Digest: HOXFfS5+p7mn1y+8ZT3XovPBnBE=
+
+Name: res/drawable-xhdpi-v4/phone.png
+SHA1-Digest: sBNpRlbeiNVluK2/gub6Uf1n09o=
+
+Name: res/drawable-hdpi-v4/ic_launcher.png
+SHA1-Digest: VnwvrkOOhRQcHkOrn7BAfYdm5Kg=
+
+Name: res/layout/row_param_list.xml
+SHA1-Digest: DxTcpJhqyI2xu9XkZnsltaty3S4=
+
+Name: res/layout-large-v4/row_param_prg.xml
+SHA1-Digest: ZB6/fVe0V5mBIJKsTGAWZRPiYGA=
+
+Name: res/layout-xlarge-v4/row_param_ico_dis.xml
+SHA1-Digest: 2wS0kF6MpDCu59nbrMFAGw5eaec=
+
+Name: res/layout/spinner_dd_ico_txt.xml
+SHA1-Digest: FmwkFuj26IFKYptujj/hjkkUQ6w=
+
+Name: res/menu/main.xml
+SHA1-Digest: H7x859Qi3vlifaXoBohUrrMwmZU=
+
+Name: res/layout-xlarge-v4/frisko_button_param.xml
+SHA1-Digest: pKH14uDZS0nEuUFd3afpWpPbJpU=
+
+Name: res/layout-small-v4/frisko_button_param.xml
+SHA1-Digest: Sz8I6nkabuCdVAymQJKE4i8+AxU=
+
+Name: res/layout-small-v4/row_param_list.xml
+SHA1-Digest: vPQd18qcufxycoY5zL+HKQeL11A=
+
+Name: res/layout-large-v4/row_param_time.xml
+SHA1-Digest: Lhf6wjoncPsrjwdzyvRI8HYRPS0=
+
+Name: res/layout-xlarge-v4/spinner_dd_txt.xml
+SHA1-Digest: AewZKHWAA7tfbBpZyLMfU7vwQkQ=
+
+Name: res/layout/spinner_dd_txt.xml
+SHA1-Digest: AlTgjYhkVRs0Z7DdBOEvs0BYuvo=
+
+Name: res/drawable/progress_horizontal.xml
+SHA1-Digest: MIzHylOUgSxmJkaOdlZXMnITS8A=
+
+Name: res/layout-small-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: hJHYbJHoKvniPwiyL9Q5L+uM4QU=
+
+Name: res/drawable-xxhdpi-v4/ic_launcher.png
+SHA1-Digest: 88sodFQEbjNiO8DdeXEmk9bEcgo=
+
+Name: res/layout/row_list.xml
+SHA1-Digest: DhEUXCHMF68c5QrlTJyqs0yD+yU=
+
+Name: res/layout-small-v4/ster_param.xml
+SHA1-Digest: Q1MUlp2NF5kCy2PNIXhdBmP0P18=
+
+Name: res/layout/ster_mainmenu.xml
+SHA1-Digest: RNzRS73qG5PbwVHhKSTS2tjvZsg=
+
+Name: res/layout-large-v4/spinner_dd_ico.xml
+SHA1-Digest: eyyjJxoiSrYhFXbIUzo4iF1QBk0=
+
+Name: res/layout-large-v4/ster_choose.xml
+SHA1-Digest: 8gl7HNGCxa66keY4tI9uKjskTBE=
+
+Name: res/layout-large-v4/ster_param.xml
+SHA1-Digest: z8nV02ECaZ9y0GJkzwih8utOupE=
+
+Name: res/layout-xlarge-v4/ster_mainmenu.xml
+SHA1-Digest: EnSdrwJORmAhXyg/DK7ec0mqLtc=
+
+Name: res/layout-xlarge-v4/about.xml
+SHA1-Digest: Uz8hAz838ijp4Xke9OqHhEaAiIw=
+
+Name: res/layout-small-v4/ster_update.xml
+SHA1-Digest: BaQAztSqSFM62MY944Sw7k1BuSY=
+
+Name: res/layout-xlarge-v4/row_param_time.xml
+SHA1-Digest: DPHNf8Pwec72F1YQ/0qNCe2T2mU=
+
+Name: res/drawable-hdpi-v4/mail.png
+SHA1-Digest: U6Zt9eg2uS2PSvCiB6jrFC2t/2g=
+
+Name: res/drawable/fb_trash.png
+SHA1-Digest: FV7d2lLptg2TXPMIyZRltMzT1PQ=
+
+Name: res/layout/frisko_button_param.xml
+SHA1-Digest: qHSN0o0CKsB5GUgHTpL6xTOF0ss=
+
+Name: res/drawable/diginn.png
+SHA1-Digest: kGtIaI+uOcq2OegoJ2m7bMBhYzk=
+
+Name: res/layout-large-v4/row_param_val.xml
+SHA1-Digest: depUT8vHZDmQ3DLTb/4GLhv4zDQ=
+
+Name: res/drawable/fb_pressed.xml
+SHA1-Digest: DrE6WgBfHiMLkt2uNoIGeYzLO7Q=
+
+Name: res/layout-xlarge-v4/row_param_ico.xml
+SHA1-Digest: qzGA+3S93FDNIkgwkmEKhpNTWwQ=
+
+Name: classes.dex
+SHA1-Digest: fWjoG/l7PUU+gRlbxK9p8IRCaBw=
+
diff --git a/apk/resources/META-INF/MANIFEST.MF b/apk/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f1681cf
--- /dev/null
+++ b/apk/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,384 @@
+Manifest-Version: 1.0
+Created-By: 1.0 (Android)
+
+Name: res/layout-xlarge-v4/row_list.xml
+SHA1-Digest: qxuv2DNKG/pKEfsVyIT/K4aPbpA=
+
+Name: res/layout/row_param_val.xml
+SHA1-Digest: sPdS87SBMOIgo0uOQimcDV4pmig=
+
+Name: res/layout-small-v4/row_param_ico_dis.xml
+SHA1-Digest: Mcd2cpgGpOmbxAVOuDiwR7/3vNM=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico.xml
+SHA1-Digest: 6w8aJDBq/rF4eZS/p1A/rvqrpVw=
+
+Name: res/layout-xlarge-v4/ster_param.xml
+SHA1-Digest: qfmq9MlUApguF5I14W5rrR2OVEI=
+
+Name: res/layout/row_param_time.xml
+SHA1-Digest: X+zIgqCzNptl6qkWXDDoojA1Cgg=
+
+Name: res/layout/row_param_val_dis.xml
+SHA1-Digest: Rxi2ooylhr9oQ1KMUMmBEb5ZZS0=
+
+Name: res/drawable-mdpi-v4/mail.png
+SHA1-Digest: 2ssnXvV4qsY5emTZvYbhpAL2FKQ=
+
+Name: res/layout-xlarge-v4/aboutcomp.xml
+SHA1-Digest: uK1O1vE93m7bZ8FL1EHp4U4v73k=
+
+Name: res/layout/aboutcomp.xml
+SHA1-Digest: LGKLHFSkvDZlt0JxybnQrAMjhpo=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: Pe8LuJARAFXEQHYQmYgbli5tOqs=
+
+Name: res/drawable-xxhdpi-v4/phone.png
+SHA1-Digest: dISmcREt6GwCuNK+eVIZHKYbqCE=
+
+Name: res/drawable-mdpi-v4/warning.png
+SHA1-Digest: jUCHpgssMm4vkVEe4V+jamc+T9c=
+
+Name: res/layout/ster_settings.xml
+SHA1-Digest: 0dGvcTyDohodG+QcsP9X3kntnZU=
+
+Name: res/layout/ster_choose.xml
+SHA1-Digest: EjRSIDMBEKhSlhaHfHPGwM8j6sU=
+
+Name: res/layout-large-v4/row_param_ico.xml
+SHA1-Digest: E8onNCMRuMYnsHM7ZPvEHgB7jIg=
+
+Name: res/drawable/fb_refresh.png
+SHA1-Digest: ExBPRYR0MVXZi5RZTFs6at1Hvz0=
+
+Name: res/drawable/fb_new.png
+SHA1-Digest: k3PCCzwbPuOb4Q9l6Ppldv4XfQI=
+
+Name: res/drawable-mdpi-v4/www.png
+SHA1-Digest: EDnszAcFZtRHH97rNUa+i57QRv8=
+
+Name: res/layout-xlarge-v4/row_param_list.xml
+SHA1-Digest: aCDAUkQ/WSJEKKspY0eT5vh9rrc=
+
+Name: res/layout-xlarge-v4/row_param_val_dis.xml
+SHA1-Digest: yseCGliQe1Qf3meC7HuvU6lk5HA=
+
+Name: res/drawable-hdpi-v4/www.png
+SHA1-Digest: LubDByfh1ENrWkV0ielrHJdxG5s=
+
+Name: res/layout/ster_update.xml
+SHA1-Digest: PBEJgTi8NeM8vqCtLa8V0dJjfsU=
+
+Name: resources.arsc
+SHA1-Digest: uzsmGqwRAQi7dDuwhPptBVrbj/c=
+
+Name: res/layout-small-v4/row_param_ico.xml
+SHA1-Digest: sxmY3z9DRB9s0up3jL5u6Dqv8hw=
+
+Name: res/layout-small-v4/spinner_dd_txt.xml
+SHA1-Digest: 7OVgUqwA45ReLyrCE3SCJSQSXik=
+
+Name: res/layout-small-v4/row_param_prg.xml
+SHA1-Digest: WWOXAAga+F5otvvHwoYysplH7Ps=
+
+Name: AndroidManifest.xml
+SHA1-Digest: z2fyF1WHb7Tr7ISBBUwplGOtQ64=
+
+Name: res/drawable/def_list_icon.png
+SHA1-Digest: 4d2SYcQenVDSPNoCotrmwYPIwfA=
+
+Name: res/layout-large-v4/row_param_val_dis.xml
+SHA1-Digest: 7g9JPnQ6aIqI50M4BvyZwLNihOg=
+
+Name: res/layout-small-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: n4OBf5UjhO/HXQbfygZif5gXrb0=
+
+Name: res/layout/row_param_prg.xml
+SHA1-Digest: MBcmdvu8Wnir8dsFPEcPbkCdOOs=
+
+Name: res/layout-large-v4/aboutcomp.xml
+SHA1-Digest: soKAnWsU/zVmqC1uPPU/+91li74=
+
+Name: res/layout/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: RwhlzpIhRirojjf1ZOZ+ktCLWxo=
+
+Name: res/layout-large-v4/ster_update.xml
+SHA1-Digest: XtrHX56GwmGat64Rz8xyMbhV48s=
+
+Name: res/layout/row_param_ico_dis.xml
+SHA1-Digest: rmX/A3Kxfezk5JPC7tXo0JHllys=
+
+Name: res/drawable/fb_normal.xml
+SHA1-Digest: J6uVkzh2eatiiI/FwqRhEPvKF+I=
+
+Name: res/layout-large-v4/frisko_button_param.xml
+SHA1-Digest: n0HOXkg5s0T8n3VWwcjuCyjxwBc=
+
+Name: res/layout-large-v4/spinner_dd_txt.xml
+SHA1-Digest: qRMHk1QyUbUBU+6olQze5lx5kO8=
+
+Name: res/layout-small-v4/row_list.xml
+SHA1-Digest: jpv6ouPDFzfO3fheyEKLKQ9sj8Q=
+
+Name: res/layout-large-v4/spinner_dd_ico_txt.xml
+SHA1-Digest: 4Rm3tPWh7cj4jbDbmLu6gAXwkE4=
+
+Name: res/layout-xlarge-v4/frisko_button.xml
+SHA1-Digest: Qssb8pg3aKAKb0TlB0HHairhx+g=
+
+Name: res/layout/ster_param.xml
+SHA1-Digest: RevT80O0vlzVKtS4bbXm4z0z/Rk=
+
+Name: res/layout-xlarge-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: /Agpru5c4WAYONmPkxZY425fi4g=
+
+Name: res/drawable-xxhdpi-v4/www.png
+SHA1-Digest: M8FVgmhH0ZP8ETdvR2n7IEMxFT4=
+
+Name: res/layout-small-v4/ster_choose.xml
+SHA1-Digest: 9yEaQGgE/eouRJ2GwjjANi07/YQ=
+
+Name: res/layout/frisko_button.xml
+SHA1-Digest: xjPBzN5/UySr80lSSkMa3fyetVg=
+
+Name: res/drawable/fb_edit.png
+SHA1-Digest: BITxwK8uNHszEZO8Ayq09Ug39gI=
+
+Name: res/drawable-hdpi-v4/warning.png
+SHA1-Digest: p3A70ajo41YCGn0kJ3a+itQ5x90=
+
+Name: res/layout-xlarge-v4/row_param_prg.xml
+SHA1-Digest: 28XTStP6xKr43KYVFgN2NqM1wXk=
+
+Name: res/layout-large-v4/row_param_list.xml
+SHA1-Digest: Vb6kxvRXrvmi1p4kqWMC5n/HPP0=
+
+Name: res/layout-small-v4/aboutcomp.xml
+SHA1-Digest: 1XGjaMkyvGKtrOCLrNkOvrFFC1w=
+
+Name: res/layout/spinner_dd_ico.xml
+SHA1-Digest: 3zpOdo1I/D7N/elB2nP80stjgps=
+
+Name: res/layout-large-v4/row_list.xml
+SHA1-Digest: 07jFSmvCmeIBRzRvZCG1VEnwYAc=
+
+Name: res/layout-small-v4/row_param_time.xml
+SHA1-Digest: AVCaSf7iGkfyXXPm0+jFBdmd/Ps=
+
+Name: res/layout-large-v4/ster_settings.xml
+SHA1-Digest: mDJDC0NarDsM/G0axiLfKO7gXB8=
+
+Name: res/drawable-xhdpi-v4/mail.png
+SHA1-Digest: +J9/FpszMNK7dlItV92zrabbXNw=
+
+Name: res/layout-small-v4/ster_settings.xml
+SHA1-Digest: BEUsF5xd1EkPlWjzySAYuusg0sg=
+
+Name: res/drawable-mdpi-v4/ic_launcher.png
+SHA1-Digest: sjH7xGxe2HQr+g+ztxtFHeaXtEA=
+
+Name: res/layout-large-v4/about.xml
+SHA1-Digest: xEiMaD6gQ97+/Zq4IDZcH+6cVX0=
+
+Name: res/layout-xlarge-v4/row_param_val.xml
+SHA1-Digest: 6BSYkn45Ss7STD9e7nu1/G2Mfqo=
+
+Name: res/drawable/fb_cancel.png
+SHA1-Digest: 37C0h0VDYXeallmijHsd/zOor8A=
+
+Name: res/drawable/fb_save.png
+SHA1-Digest: WKTz/dp5o9IzqJT1Mo4IaAU5uBs=
+
+Name: res/drawable/frisko.png
+SHA1-Digest: MnGjZXVwPPtWwrBtMCrlzPpMCV0=
+
+Name: res/layout/row_param_ico.xml
+SHA1-Digest: mNM9IYuT4e54J1RCkpMg5ANQDj0=
+
+Name: res/drawable-hdpi-v4/phone.png
+SHA1-Digest: 4BySuKOi54tzetsRq2K1P78WgUA=
+
+Name: res/layout-large-v4/row_param_ico_dis.xml
+SHA1-Digest: 5TwFr9bOoQlLvY/zAw3F0toEOYc=
+
+Name: res/layout-small-v4/spinner_dd_ico.xml
+SHA1-Digest: VVB3fh8jfrF3DvvPjyl3jQmwV/c=
+
+Name: res/layout/about.xml
+SHA1-Digest: z9YLo9mFPodoGUP+bC5I7ZgYUig=
+
+Name: res/layout-large-v4/ster_mainmenu.xml
+SHA1-Digest: pOKKXeDiAM1OwYEZvsxeK8wLtW4=
+
+Name: res/layout-small-v4/row_param_val.xml
+SHA1-Digest: peyGx0FrKTmKYIRLsOWSIhswTKg=
+
+Name: res/layout-small-v4/about.xml
+SHA1-Digest: qkWlyqAUo0/RsVRMtaD5WRE/dFQ=
+
+Name: res/layout-xlarge-v4/ster_settings.xml
+SHA1-Digest: yM5Iqui7BzD3QwsiDegTgcz7m4A=
+
+Name: res/drawable/fb_check.png
+SHA1-Digest: vMKQfrU8GakAkXr4DcNztndJ0KU=
+
+Name: res/layout-large-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: 1qPMdWvXvDBwuatgBElST4mz6Y8=
+
+Name: res/menu/menu_2.xml
+SHA1-Digest: VvdiONxAQor0b79KYv12s73+JCs=
+
+Name: res/drawable-xhdpi-v4/warning.png
+SHA1-Digest: GskWiKev/E5n0rLdk8Nuh+CXEkY=
+
+Name: res/drawable-xxhdpi-v4/warning.png
+SHA1-Digest: nAG5VcBB6U2hjxxTj/l84X8dbtU=
+
+Name: res/layout/row_dd_null.xml
+SHA1-Digest: 5BcFlRLzwqSOG/6prta010ClK94=
+
+Name: res/layout-xlarge-v4/ster_choose.xml
+SHA1-Digest: EuJSPsBAID90QHngacDmmNzxkmI=
+
+Name: res/drawable-xxhdpi-v4/mail.png
+SHA1-Digest: A0sYi2LOxZLxZGtEmNSdDWr3M/c=
+
+Name: res/layout-small-v4/frisko_button.xml
+SHA1-Digest: pzfMjj6el54n3igiP6+lMBbGey0=
+
+Name: res/drawable/fb_style.xml
+SHA1-Digest: PFKi0yQZjfLHbSaayG405W3o4wY=
+
+Name: res/drawable/fb_failed.png
+SHA1-Digest: vYrRSCCL9F83mRBdrzBCQgLDZ1M=
+
+Name: res/drawable-xhdpi-v4/ic_launcher.png
+SHA1-Digest: AqOZ8rNFU3sVDNA3Qrw4Tx0KHoM=
+
+Name: res/layout-small-v4/ster_mainmenu.xml
+SHA1-Digest: GjUmqZV1OyTRWM7aTW8fWyVJtN4=
+
+Name: res/drawable-xhdpi-v4/www.png
+SHA1-Digest: Usi/JBjqG9/ToFbid+VZTBPfl1s=
+
+Name: res/drawable/fb_delete.png
+SHA1-Digest: et4q9mg6gW/ILaQYlSsuo9LG+Dc=
+
+Name: res/layout-small-v4/row_param_val_dis.xml
+SHA1-Digest: ZmpUySEXXPD+jGGGpCaq8qNQrIs=
+
+Name: res/layout-xlarge-v4/ster_update.xml
+SHA1-Digest: XKg3biQthjgZa4IW80XVzjCZGPk=
+
+Name: res/drawable/fb_connect.png
+SHA1-Digest: hdW/yNbCP54ONqfWCE7ZnSUo7I4=
+
+Name: res/layout-large-v4/frisko_button.xml
+SHA1-Digest: BJkz7Dy8EOpBZcYPFW6J5W+MKPM=
+
+Name: res/drawable-mdpi-v4/phone.png
+SHA1-Digest: 0XtIy9aKdFVhL5+kdZMirePZRW0=
+
+Name: res/drawable-xhdpi-v4/phone.png
+SHA1-Digest: 3Ceb2xkB59evUBSf0xXBDrebuFA=
+
+Name: res/drawable-hdpi-v4/ic_launcher.png
+SHA1-Digest: LddD2ReF9rcw+XkOlW8fFulzmnU=
+
+Name: res/layout/row_param_list.xml
+SHA1-Digest: kJgQ+rYAXnMcJ2plyezkgLRbqSA=
+
+Name: res/layout-large-v4/row_param_prg.xml
+SHA1-Digest: PmbvO+MP5d2+mP4/uI4UdF3WDoM=
+
+Name: res/layout-xlarge-v4/row_param_ico_dis.xml
+SHA1-Digest: 25nHUEohr+fCXsbP+S2pIRFMYoU=
+
+Name: res/layout/spinner_dd_ico_txt.xml
+SHA1-Digest: GpksQoYeB4sXpTlsXbPcRPsGC38=
+
+Name: res/menu/main.xml
+SHA1-Digest: MTnN3TFE7s42phFbgN+MCHBgHKE=
+
+Name: res/layout-xlarge-v4/frisko_button_param.xml
+SHA1-Digest: d4BlKLh4XtkCPCJpwcMv2b4Pgdc=
+
+Name: res/layout-small-v4/frisko_button_param.xml
+SHA1-Digest: K37MoxmSU5A/jkShjWrASWLo0nQ=
+
+Name: res/layout-small-v4/row_param_list.xml
+SHA1-Digest: xcuGOfpx7t5LpuYs0KaK0rcx4Hk=
+
+Name: res/layout-large-v4/row_param_time.xml
+SHA1-Digest: nE4zkDkqWYXaA4tcrA5D2DbgIpo=
+
+Name: res/layout-xlarge-v4/spinner_dd_txt.xml
+SHA1-Digest: qp5dprhTdFZV3CWkk1dvQWcz+ts=
+
+Name: res/layout/spinner_dd_txt.xml
+SHA1-Digest: cDBNcON5PzfTvtAfQzcifI+R+T4=
+
+Name: res/drawable/progress_horizontal.xml
+SHA1-Digest: TIQpgkxIaFP6Szd1wsWIABidn9s=
+
+Name: res/layout-small-v4/spinner_dd_ico_txt_cb.xml
+SHA1-Digest: v+00YGaXL+mEEqGgpZpVmTp5Yc8=
+
+Name: res/drawable-xxhdpi-v4/ic_launcher.png
+SHA1-Digest: PnvakS0dKmfMTPKM4HbUjiOfDjA=
+
+Name: res/layout/row_list.xml
+SHA1-Digest: PRC0dIUcm9jU8FbkONgHmQn+h/I=
+
+Name: res/layout-small-v4/ster_param.xml
+SHA1-Digest: 1aCqycu+1tg7jHxKgL6xIsihSPQ=
+
+Name: res/layout/ster_mainmenu.xml
+SHA1-Digest: BLWHqS3ryIe9E5JTWgaMG2gLTPk=
+
+Name: res/layout-large-v4/spinner_dd_ico.xml
+SHA1-Digest: QEfzk9KXqQhA332p0SlFv9ZdM00=
+
+Name: res/layout-large-v4/ster_choose.xml
+SHA1-Digest: Ruesz8baUI6ZkpihqhlUAm6BBZE=
+
+Name: res/layout-large-v4/ster_param.xml
+SHA1-Digest: d2H1hXaULZtaLS+l05k4WJEk0XY=
+
+Name: res/layout-xlarge-v4/ster_mainmenu.xml
+SHA1-Digest: Re2jXHOY6b+4ZA2mlTLNdNtHCJA=
+
+Name: res/layout-xlarge-v4/about.xml
+SHA1-Digest: FnnPcOR6vnxhasQLc4BJecinzgw=
+
+Name: res/layout-small-v4/ster_update.xml
+SHA1-Digest: a3DttJ1hVWa8nXc3uVGZC+XvsPg=
+
+Name: res/layout-xlarge-v4/row_param_time.xml
+SHA1-Digest: WzCR2OzOZgFLpyIfBbmJVCvPnaY=
+
+Name: res/drawable-hdpi-v4/mail.png
+SHA1-Digest: NlDzSY8RJzwfAl2ak38tzEzqJtw=
+
+Name: res/drawable/fb_trash.png
+SHA1-Digest: Ip1+gZXBlQpmP2mx+un8VpTBzM4=
+
+Name: res/layout/frisko_button_param.xml
+SHA1-Digest: p3KcWrAJLMakR+rwecZNUYvfXko=
+
+Name: res/drawable/diginn.png
+SHA1-Digest: /uadwbnIskJdiBRNbPWsswcK6L0=
+
+Name: res/layout-large-v4/row_param_val.xml
+SHA1-Digest: 1atS+purRP8vWWjtDdKFQis2vUU=
+
+Name: res/drawable/fb_pressed.xml
+SHA1-Digest: EgUegw4+oln2m8PqNTkSQdmSIQQ=
+
+Name: res/layout-xlarge-v4/row_param_ico.xml
+SHA1-Digest: H29lyIVmnyrLf1ZoREfZQzdPeSQ=
+
+Name: classes.dex
+SHA1-Digest: fPU6Fvf68z9aFk4Pht/3rkC1g1U=
+
diff --git a/apk/resources/res/drawable-hdpi-v4/ic_launcher.png b/apk/resources/res/drawable-hdpi-v4/ic_launcher.png
new file mode 100644
index 0000000..62d25cb
Binary files /dev/null and b/apk/resources/res/drawable-hdpi-v4/ic_launcher.png differ
diff --git a/apk/resources/res/drawable-hdpi-v4/mail.png b/apk/resources/res/drawable-hdpi-v4/mail.png
new file mode 100644
index 0000000..23fbd5c
Binary files /dev/null and b/apk/resources/res/drawable-hdpi-v4/mail.png differ
diff --git a/apk/resources/res/drawable-hdpi-v4/phone.png b/apk/resources/res/drawable-hdpi-v4/phone.png
new file mode 100644
index 0000000..bddeea2
Binary files /dev/null and b/apk/resources/res/drawable-hdpi-v4/phone.png differ
diff --git a/apk/resources/res/drawable-hdpi-v4/warning.png b/apk/resources/res/drawable-hdpi-v4/warning.png
new file mode 100644
index 0000000..a44d8a6
Binary files /dev/null and b/apk/resources/res/drawable-hdpi-v4/warning.png differ
diff --git a/apk/resources/res/drawable-hdpi-v4/www.png b/apk/resources/res/drawable-hdpi-v4/www.png
new file mode 100644
index 0000000..8b10097
Binary files /dev/null and b/apk/resources/res/drawable-hdpi-v4/www.png differ
diff --git a/apk/resources/res/drawable-mdpi-v4/ic_launcher.png b/apk/resources/res/drawable-mdpi-v4/ic_launcher.png
new file mode 100644
index 0000000..748e1ff
Binary files /dev/null and b/apk/resources/res/drawable-mdpi-v4/ic_launcher.png differ
diff --git a/apk/resources/res/drawable-mdpi-v4/mail.png b/apk/resources/res/drawable-mdpi-v4/mail.png
new file mode 100644
index 0000000..f66a74e
Binary files /dev/null and b/apk/resources/res/drawable-mdpi-v4/mail.png differ
diff --git a/apk/resources/res/drawable-mdpi-v4/phone.png b/apk/resources/res/drawable-mdpi-v4/phone.png
new file mode 100644
index 0000000..411081d
Binary files /dev/null and b/apk/resources/res/drawable-mdpi-v4/phone.png differ
diff --git a/apk/resources/res/drawable-mdpi-v4/warning.png b/apk/resources/res/drawable-mdpi-v4/warning.png
new file mode 100644
index 0000000..a9d2eb0
Binary files /dev/null and b/apk/resources/res/drawable-mdpi-v4/warning.png differ
diff --git a/apk/resources/res/drawable-mdpi-v4/www.png b/apk/resources/res/drawable-mdpi-v4/www.png
new file mode 100644
index 0000000..8fa3406
Binary files /dev/null and b/apk/resources/res/drawable-mdpi-v4/www.png differ
diff --git a/apk/resources/res/drawable-xhdpi-v4/ic_launcher.png b/apk/resources/res/drawable-xhdpi-v4/ic_launcher.png
new file mode 100644
index 0000000..322e001
Binary files /dev/null and b/apk/resources/res/drawable-xhdpi-v4/ic_launcher.png differ
diff --git a/apk/resources/res/drawable-xhdpi-v4/mail.png b/apk/resources/res/drawable-xhdpi-v4/mail.png
new file mode 100644
index 0000000..fc7feb5
Binary files /dev/null and b/apk/resources/res/drawable-xhdpi-v4/mail.png differ
diff --git a/apk/resources/res/drawable-xhdpi-v4/phone.png b/apk/resources/res/drawable-xhdpi-v4/phone.png
new file mode 100644
index 0000000..86e64fc
Binary files /dev/null and b/apk/resources/res/drawable-xhdpi-v4/phone.png differ
diff --git a/apk/resources/res/drawable-xhdpi-v4/warning.png b/apk/resources/res/drawable-xhdpi-v4/warning.png
new file mode 100644
index 0000000..39afb3b
Binary files /dev/null and b/apk/resources/res/drawable-xhdpi-v4/warning.png differ
diff --git a/apk/resources/res/drawable-xhdpi-v4/www.png b/apk/resources/res/drawable-xhdpi-v4/www.png
new file mode 100644
index 0000000..24562f9
Binary files /dev/null and b/apk/resources/res/drawable-xhdpi-v4/www.png differ
diff --git a/apk/resources/res/drawable-xxhdpi-v4/ic_launcher.png b/apk/resources/res/drawable-xxhdpi-v4/ic_launcher.png
new file mode 100644
index 0000000..7a5be99
Binary files /dev/null and b/apk/resources/res/drawable-xxhdpi-v4/ic_launcher.png differ
diff --git a/apk/resources/res/drawable-xxhdpi-v4/mail.png b/apk/resources/res/drawable-xxhdpi-v4/mail.png
new file mode 100644
index 0000000..363ce8d
Binary files /dev/null and b/apk/resources/res/drawable-xxhdpi-v4/mail.png differ
diff --git a/apk/resources/res/drawable-xxhdpi-v4/phone.png b/apk/resources/res/drawable-xxhdpi-v4/phone.png
new file mode 100644
index 0000000..86c2260
Binary files /dev/null and b/apk/resources/res/drawable-xxhdpi-v4/phone.png differ
diff --git a/apk/resources/res/drawable-xxhdpi-v4/warning.png b/apk/resources/res/drawable-xxhdpi-v4/warning.png
new file mode 100644
index 0000000..dda8f52
Binary files /dev/null and b/apk/resources/res/drawable-xxhdpi-v4/warning.png differ
diff --git a/apk/resources/res/drawable-xxhdpi-v4/www.png b/apk/resources/res/drawable-xxhdpi-v4/www.png
new file mode 100644
index 0000000..2f29079
Binary files /dev/null and b/apk/resources/res/drawable-xxhdpi-v4/www.png differ
diff --git a/apk/resources/res/drawable/def_list_icon.png b/apk/resources/res/drawable/def_list_icon.png
new file mode 100644
index 0000000..f17983f
Binary files /dev/null and b/apk/resources/res/drawable/def_list_icon.png differ
diff --git a/apk/resources/res/drawable/diginn.png b/apk/resources/res/drawable/diginn.png
new file mode 100644
index 0000000..4109b1e
Binary files /dev/null and b/apk/resources/res/drawable/diginn.png differ
diff --git a/apk/resources/res/drawable/fb_cancel.png b/apk/resources/res/drawable/fb_cancel.png
new file mode 100644
index 0000000..fc9d115
Binary files /dev/null and b/apk/resources/res/drawable/fb_cancel.png differ
diff --git a/apk/resources/res/drawable/fb_check.png b/apk/resources/res/drawable/fb_check.png
new file mode 100644
index 0000000..9c62ee5
Binary files /dev/null and b/apk/resources/res/drawable/fb_check.png differ
diff --git a/apk/resources/res/drawable/fb_connect.png b/apk/resources/res/drawable/fb_connect.png
new file mode 100644
index 0000000..8f5fa2d
Binary files /dev/null and b/apk/resources/res/drawable/fb_connect.png differ
diff --git a/apk/resources/res/drawable/fb_delete.png b/apk/resources/res/drawable/fb_delete.png
new file mode 100644
index 0000000..60631bc
Binary files /dev/null and b/apk/resources/res/drawable/fb_delete.png differ
diff --git a/apk/resources/res/drawable/fb_edit.png b/apk/resources/res/drawable/fb_edit.png
new file mode 100644
index 0000000..8f9bf48
Binary files /dev/null and b/apk/resources/res/drawable/fb_edit.png differ
diff --git a/apk/resources/res/drawable/fb_failed.png b/apk/resources/res/drawable/fb_failed.png
new file mode 100644
index 0000000..17ceb59
Binary files /dev/null and b/apk/resources/res/drawable/fb_failed.png differ
diff --git a/apk/resources/res/drawable/fb_new.png b/apk/resources/res/drawable/fb_new.png
new file mode 100644
index 0000000..e8c489b
Binary files /dev/null and b/apk/resources/res/drawable/fb_new.png differ
diff --git a/apk/resources/res/drawable/fb_normal.xml b/apk/resources/res/drawable/fb_normal.xml
new file mode 100644
index 0000000..4ac76cd
--- /dev/null
+++ b/apk/resources/res/drawable/fb_normal.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/apk/resources/res/drawable/fb_pressed.xml b/apk/resources/res/drawable/fb_pressed.xml
new file mode 100644
index 0000000..b06a2db
--- /dev/null
+++ b/apk/resources/res/drawable/fb_pressed.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/apk/resources/res/drawable/fb_refresh.png b/apk/resources/res/drawable/fb_refresh.png
new file mode 100644
index 0000000..94836d9
Binary files /dev/null and b/apk/resources/res/drawable/fb_refresh.png differ
diff --git a/apk/resources/res/drawable/fb_save.png b/apk/resources/res/drawable/fb_save.png
new file mode 100644
index 0000000..f004f06
Binary files /dev/null and b/apk/resources/res/drawable/fb_save.png differ
diff --git a/apk/resources/res/drawable/fb_style.xml b/apk/resources/res/drawable/fb_style.xml
new file mode 100644
index 0000000..72eb31f
--- /dev/null
+++ b/apk/resources/res/drawable/fb_style.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/apk/resources/res/drawable/fb_trash.png b/apk/resources/res/drawable/fb_trash.png
new file mode 100644
index 0000000..bb1c440
Binary files /dev/null and b/apk/resources/res/drawable/fb_trash.png differ
diff --git a/apk/resources/res/drawable/frisko.png b/apk/resources/res/drawable/frisko.png
new file mode 100644
index 0000000..d9dcdd9
Binary files /dev/null and b/apk/resources/res/drawable/frisko.png differ
diff --git a/apk/resources/res/drawable/progress_horizontal.xml b/apk/resources/res/drawable/progress_horizontal.xml
new file mode 100644
index 0000000..50ed14a
--- /dev/null
+++ b/apk/resources/res/drawable/progress_horizontal.xml
@@ -0,0 +1,40 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/about.xml b/apk/resources/res/layout-large-v4/about.xml
new file mode 100644
index 0000000..b80cef3
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/about.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/aboutcomp.xml b/apk/resources/res/layout-large-v4/aboutcomp.xml
new file mode 100644
index 0000000..9ac819f
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/aboutcomp.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/frisko_button.xml b/apk/resources/res/layout-large-v4/frisko_button.xml
new file mode 100644
index 0000000..f080bea
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/frisko_button.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/frisko_button_param.xml b/apk/resources/res/layout-large-v4/frisko_button_param.xml
new file mode 100644
index 0000000..7d7cd20
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/frisko_button_param.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_list.xml b/apk/resources/res/layout-large-v4/row_list.xml
new file mode 100644
index 0000000..63b7938
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_list.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_ico.xml b/apk/resources/res/layout-large-v4/row_param_ico.xml
new file mode 100644
index 0000000..16322ba
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_ico.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_ico_dis.xml b/apk/resources/res/layout-large-v4/row_param_ico_dis.xml
new file mode 100644
index 0000000..a5463dd
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_ico_dis.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_list.xml b/apk/resources/res/layout-large-v4/row_param_list.xml
new file mode 100644
index 0000000..2acc98f
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_list.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_prg.xml b/apk/resources/res/layout-large-v4/row_param_prg.xml
new file mode 100644
index 0000000..825ea6f
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_prg.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_time.xml b/apk/resources/res/layout-large-v4/row_param_time.xml
new file mode 100644
index 0000000..51eae72
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_time.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_val.xml b/apk/resources/res/layout-large-v4/row_param_val.xml
new file mode 100644
index 0000000..8656d32
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_val.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/row_param_val_dis.xml b/apk/resources/res/layout-large-v4/row_param_val_dis.xml
new file mode 100644
index 0000000..dba1df7
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/row_param_val_dis.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/spinner_dd_ico.xml b/apk/resources/res/layout-large-v4/spinner_dd_ico.xml
new file mode 100644
index 0000000..6c26f7f
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/spinner_dd_ico.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/spinner_dd_ico_txt.xml b/apk/resources/res/layout-large-v4/spinner_dd_ico_txt.xml
new file mode 100644
index 0000000..d910f81
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/spinner_dd_ico_txt.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/spinner_dd_ico_txt_cb.xml b/apk/resources/res/layout-large-v4/spinner_dd_ico_txt_cb.xml
new file mode 100644
index 0000000..5ffecc4
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/spinner_dd_ico_txt_cb.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/spinner_dd_txt.xml b/apk/resources/res/layout-large-v4/spinner_dd_txt.xml
new file mode 100644
index 0000000..3faa4bb
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/spinner_dd_txt.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/ster_choose.xml b/apk/resources/res/layout-large-v4/ster_choose.xml
new file mode 100644
index 0000000..f0b5adb
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/ster_choose.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/ster_mainmenu.xml b/apk/resources/res/layout-large-v4/ster_mainmenu.xml
new file mode 100644
index 0000000..d53f036
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/ster_mainmenu.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/ster_param.xml b/apk/resources/res/layout-large-v4/ster_param.xml
new file mode 100644
index 0000000..a580098
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/ster_param.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/ster_settings.xml b/apk/resources/res/layout-large-v4/ster_settings.xml
new file mode 100644
index 0000000..e315110
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/ster_settings.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-large-v4/ster_update.xml b/apk/resources/res/layout-large-v4/ster_update.xml
new file mode 100644
index 0000000..16f8231
--- /dev/null
+++ b/apk/resources/res/layout-large-v4/ster_update.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/about.xml b/apk/resources/res/layout-small-v4/about.xml
new file mode 100644
index 0000000..ac841b2
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/about.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/aboutcomp.xml b/apk/resources/res/layout-small-v4/aboutcomp.xml
new file mode 100644
index 0000000..4e349a3
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/aboutcomp.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/frisko_button.xml b/apk/resources/res/layout-small-v4/frisko_button.xml
new file mode 100644
index 0000000..2b8462d
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/frisko_button.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/frisko_button_param.xml b/apk/resources/res/layout-small-v4/frisko_button_param.xml
new file mode 100644
index 0000000..bf3ea42
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/frisko_button_param.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_list.xml b/apk/resources/res/layout-small-v4/row_list.xml
new file mode 100644
index 0000000..8c60732
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_list.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_ico.xml b/apk/resources/res/layout-small-v4/row_param_ico.xml
new file mode 100644
index 0000000..d65685a
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_ico.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_ico_dis.xml b/apk/resources/res/layout-small-v4/row_param_ico_dis.xml
new file mode 100644
index 0000000..178b3cf
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_ico_dis.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_list.xml b/apk/resources/res/layout-small-v4/row_param_list.xml
new file mode 100644
index 0000000..7531c8d
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_list.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_prg.xml b/apk/resources/res/layout-small-v4/row_param_prg.xml
new file mode 100644
index 0000000..18e8577
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_prg.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_time.xml b/apk/resources/res/layout-small-v4/row_param_time.xml
new file mode 100644
index 0000000..a8a909a
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_time.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_val.xml b/apk/resources/res/layout-small-v4/row_param_val.xml
new file mode 100644
index 0000000..bac0437
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_val.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/row_param_val_dis.xml b/apk/resources/res/layout-small-v4/row_param_val_dis.xml
new file mode 100644
index 0000000..92a588a
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/row_param_val_dis.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/spinner_dd_ico.xml b/apk/resources/res/layout-small-v4/spinner_dd_ico.xml
new file mode 100644
index 0000000..5952eea
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/spinner_dd_ico.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/spinner_dd_ico_txt.xml b/apk/resources/res/layout-small-v4/spinner_dd_ico_txt.xml
new file mode 100644
index 0000000..d888d8a
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/spinner_dd_ico_txt.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/spinner_dd_ico_txt_cb.xml b/apk/resources/res/layout-small-v4/spinner_dd_ico_txt_cb.xml
new file mode 100644
index 0000000..fe5bfb0
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/spinner_dd_ico_txt_cb.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/spinner_dd_txt.xml b/apk/resources/res/layout-small-v4/spinner_dd_txt.xml
new file mode 100644
index 0000000..f6bca32
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/spinner_dd_txt.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/ster_choose.xml b/apk/resources/res/layout-small-v4/ster_choose.xml
new file mode 100644
index 0000000..7d71dc2
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/ster_choose.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/ster_mainmenu.xml b/apk/resources/res/layout-small-v4/ster_mainmenu.xml
new file mode 100644
index 0000000..962b41e
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/ster_mainmenu.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/ster_param.xml b/apk/resources/res/layout-small-v4/ster_param.xml
new file mode 100644
index 0000000..1be2b6b
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/ster_param.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/ster_settings.xml b/apk/resources/res/layout-small-v4/ster_settings.xml
new file mode 100644
index 0000000..71ff1ad
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/ster_settings.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-small-v4/ster_update.xml b/apk/resources/res/layout-small-v4/ster_update.xml
new file mode 100644
index 0000000..1702582
--- /dev/null
+++ b/apk/resources/res/layout-small-v4/ster_update.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/about.xml b/apk/resources/res/layout-xlarge-v4/about.xml
new file mode 100644
index 0000000..37a8850
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/about.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/aboutcomp.xml b/apk/resources/res/layout-xlarge-v4/aboutcomp.xml
new file mode 100644
index 0000000..6ece093
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/aboutcomp.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/frisko_button.xml b/apk/resources/res/layout-xlarge-v4/frisko_button.xml
new file mode 100644
index 0000000..30b8365
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/frisko_button.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/frisko_button_param.xml b/apk/resources/res/layout-xlarge-v4/frisko_button_param.xml
new file mode 100644
index 0000000..593ba9b
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/frisko_button_param.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_list.xml b/apk/resources/res/layout-xlarge-v4/row_list.xml
new file mode 100644
index 0000000..b79f45e
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_list.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_ico.xml b/apk/resources/res/layout-xlarge-v4/row_param_ico.xml
new file mode 100644
index 0000000..a3791d7
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_ico.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_ico_dis.xml b/apk/resources/res/layout-xlarge-v4/row_param_ico_dis.xml
new file mode 100644
index 0000000..bf77a6b
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_ico_dis.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_list.xml b/apk/resources/res/layout-xlarge-v4/row_param_list.xml
new file mode 100644
index 0000000..14bd96a
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_list.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_prg.xml b/apk/resources/res/layout-xlarge-v4/row_param_prg.xml
new file mode 100644
index 0000000..cbd92f4
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_prg.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_time.xml b/apk/resources/res/layout-xlarge-v4/row_param_time.xml
new file mode 100644
index 0000000..6c150e2
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_time.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_val.xml b/apk/resources/res/layout-xlarge-v4/row_param_val.xml
new file mode 100644
index 0000000..128579e
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_val.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/row_param_val_dis.xml b/apk/resources/res/layout-xlarge-v4/row_param_val_dis.xml
new file mode 100644
index 0000000..717e42d
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/row_param_val_dis.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/spinner_dd_ico.xml b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico.xml
new file mode 100644
index 0000000..75e89a1
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt.xml b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt.xml
new file mode 100644
index 0000000..eb57f7b
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt_cb.xml b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt_cb.xml
new file mode 100644
index 0000000..088d480
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/spinner_dd_ico_txt_cb.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/spinner_dd_txt.xml b/apk/resources/res/layout-xlarge-v4/spinner_dd_txt.xml
new file mode 100644
index 0000000..85d7b35
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/spinner_dd_txt.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/ster_choose.xml b/apk/resources/res/layout-xlarge-v4/ster_choose.xml
new file mode 100644
index 0000000..ad142bf
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/ster_choose.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/ster_mainmenu.xml b/apk/resources/res/layout-xlarge-v4/ster_mainmenu.xml
new file mode 100644
index 0000000..d0bad6b
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/ster_mainmenu.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/ster_param.xml b/apk/resources/res/layout-xlarge-v4/ster_param.xml
new file mode 100644
index 0000000..83c224b
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/ster_param.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/ster_settings.xml b/apk/resources/res/layout-xlarge-v4/ster_settings.xml
new file mode 100644
index 0000000..e5d946a
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/ster_settings.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout-xlarge-v4/ster_update.xml b/apk/resources/res/layout-xlarge-v4/ster_update.xml
new file mode 100644
index 0000000..b82de42
--- /dev/null
+++ b/apk/resources/res/layout-xlarge-v4/ster_update.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/about.xml b/apk/resources/res/layout/about.xml
new file mode 100644
index 0000000..a10e29f
--- /dev/null
+++ b/apk/resources/res/layout/about.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/aboutcomp.xml b/apk/resources/res/layout/aboutcomp.xml
new file mode 100644
index 0000000..eae1231
--- /dev/null
+++ b/apk/resources/res/layout/aboutcomp.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/frisko_button.xml b/apk/resources/res/layout/frisko_button.xml
new file mode 100644
index 0000000..5adf62d
--- /dev/null
+++ b/apk/resources/res/layout/frisko_button.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/frisko_button_param.xml b/apk/resources/res/layout/frisko_button_param.xml
new file mode 100644
index 0000000..2d7f007
--- /dev/null
+++ b/apk/resources/res/layout/frisko_button_param.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_dd_null.xml b/apk/resources/res/layout/row_dd_null.xml
new file mode 100644
index 0000000..cb7cfc4
--- /dev/null
+++ b/apk/resources/res/layout/row_dd_null.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/apk/resources/res/layout/row_list.xml b/apk/resources/res/layout/row_list.xml
new file mode 100644
index 0000000..f234dbe
--- /dev/null
+++ b/apk/resources/res/layout/row_list.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_ico.xml b/apk/resources/res/layout/row_param_ico.xml
new file mode 100644
index 0000000..af1e15f
--- /dev/null
+++ b/apk/resources/res/layout/row_param_ico.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_ico_dis.xml b/apk/resources/res/layout/row_param_ico_dis.xml
new file mode 100644
index 0000000..cbdddc0
--- /dev/null
+++ b/apk/resources/res/layout/row_param_ico_dis.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_list.xml b/apk/resources/res/layout/row_param_list.xml
new file mode 100644
index 0000000..6e7d8c1
--- /dev/null
+++ b/apk/resources/res/layout/row_param_list.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_prg.xml b/apk/resources/res/layout/row_param_prg.xml
new file mode 100644
index 0000000..659a0d8
--- /dev/null
+++ b/apk/resources/res/layout/row_param_prg.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_time.xml b/apk/resources/res/layout/row_param_time.xml
new file mode 100644
index 0000000..2a5d911
--- /dev/null
+++ b/apk/resources/res/layout/row_param_time.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_val.xml b/apk/resources/res/layout/row_param_val.xml
new file mode 100644
index 0000000..0155f38
--- /dev/null
+++ b/apk/resources/res/layout/row_param_val.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/row_param_val_dis.xml b/apk/resources/res/layout/row_param_val_dis.xml
new file mode 100644
index 0000000..cbb9d6d
--- /dev/null
+++ b/apk/resources/res/layout/row_param_val_dis.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/spinner_dd_ico.xml b/apk/resources/res/layout/spinner_dd_ico.xml
new file mode 100644
index 0000000..f36ed53
--- /dev/null
+++ b/apk/resources/res/layout/spinner_dd_ico.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/apk/resources/res/layout/spinner_dd_ico_txt.xml b/apk/resources/res/layout/spinner_dd_ico_txt.xml
new file mode 100644
index 0000000..ed20359
--- /dev/null
+++ b/apk/resources/res/layout/spinner_dd_ico_txt.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/apk/resources/res/layout/spinner_dd_ico_txt_cb.xml b/apk/resources/res/layout/spinner_dd_ico_txt_cb.xml
new file mode 100644
index 0000000..06055f9
--- /dev/null
+++ b/apk/resources/res/layout/spinner_dd_ico_txt_cb.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/spinner_dd_txt.xml b/apk/resources/res/layout/spinner_dd_txt.xml
new file mode 100644
index 0000000..1ddd7f8
--- /dev/null
+++ b/apk/resources/res/layout/spinner_dd_txt.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout/ster_choose.xml b/apk/resources/res/layout/ster_choose.xml
new file mode 100644
index 0000000..0eec17b
--- /dev/null
+++ b/apk/resources/res/layout/ster_choose.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/ster_mainmenu.xml b/apk/resources/res/layout/ster_mainmenu.xml
new file mode 100644
index 0000000..2206906
--- /dev/null
+++ b/apk/resources/res/layout/ster_mainmenu.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/apk/resources/res/layout/ster_param.xml b/apk/resources/res/layout/ster_param.xml
new file mode 100644
index 0000000..2f1eacb
--- /dev/null
+++ b/apk/resources/res/layout/ster_param.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/apk/resources/res/layout/ster_settings.xml b/apk/resources/res/layout/ster_settings.xml
new file mode 100644
index 0000000..0b76308
--- /dev/null
+++ b/apk/resources/res/layout/ster_settings.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/layout/ster_update.xml b/apk/resources/res/layout/ster_update.xml
new file mode 100644
index 0000000..e72200c
--- /dev/null
+++ b/apk/resources/res/layout/ster_update.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/apk/resources/res/menu/main.xml b/apk/resources/res/menu/main.xml
new file mode 100644
index 0000000..808d673
--- /dev/null
+++ b/apk/resources/res/menu/main.xml
@@ -0,0 +1,13 @@
+
+
diff --git a/apk/resources/res/menu/menu_2.xml b/apk/resources/res/menu/menu_2.xml
new file mode 100644
index 0000000..967c8df
--- /dev/null
+++ b/apk/resources/res/menu/menu_2.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/apk/resources/res/values-hdpi-v4/drawables.xml b/apk/resources/res/values-hdpi-v4/drawables.xml
new file mode 100644
index 0000000..045e125
--- /dev/null
+++ b/apk/resources/res/values-hdpi-v4/drawables.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/apk/resources/res/values-mdpi-v4/drawables.xml b/apk/resources/res/values-mdpi-v4/drawables.xml
new file mode 100644
index 0000000..045e125
--- /dev/null
+++ b/apk/resources/res/values-mdpi-v4/drawables.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/apk/resources/res/values-xhdpi-v4/drawables.xml b/apk/resources/res/values-xhdpi-v4/drawables.xml
new file mode 100644
index 0000000..045e125
--- /dev/null
+++ b/apk/resources/res/values-xhdpi-v4/drawables.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/apk/resources/res/values-xxhdpi-v4/drawables.xml b/apk/resources/res/values-xxhdpi-v4/drawables.xml
new file mode 100644
index 0000000..045e125
--- /dev/null
+++ b/apk/resources/res/values-xxhdpi-v4/drawables.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/apk/resources/res/values/drawables.xml b/apk/resources/res/values/drawables.xml
new file mode 100644
index 0000000..045e125
--- /dev/null
+++ b/apk/resources/res/values/drawables.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/apk/resources/res/values/public.xml b/apk/resources/res/values/public.xml
new file mode 100644
index 0000000..8b44eb9
--- /dev/null
+++ b/apk/resources/res/values/public.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apk/resources/res/values/strings.xml b/apk/resources/res/values/strings.xml
new file mode 100644
index 0000000..cbcfb47
--- /dev/null
+++ b/apk/resources/res/values/strings.xml
@@ -0,0 +1,48 @@
+
+
+ FRISKO-MOBILE
+ Menu
+ O aplikacji
+ Wybierz sterownik
+ Nowy strownik
+ Zmień ustawienia
+ Parametry sterownika
+ Aktualizacja
+ Aktualizacja listy obsługiwanych sterowników...
+ Aktualizacja zakończona powodzeniem.
+ Aktualizacja nie powiodła się. Sprawdź połączenie z internetem.
+ Anuluj
+ Przywróć domyślny wygląd
+ O aplikacji
+ O firmie Frisko
+ FRISKO-MOBILE
+ Wersja 1.4
+ Aplikacja FRISKO-MOBILE przeznaczona jest do zdalnej obsługi sterowników FRISKO podłączonych do sieci LAN o stałym adresie IP za pośrednictwem wbudowanych lub zewnętrznych modułów komunikacyjnych. Komunikacja realizowana jest z wykorzystaniem protokołu MODBUS TCP.
+ Firma FRISKO nie ponosi odpowiedzialności za ewentualne szkody powstałe w wyniku niewłaściwego użytkowania aplikacji.
+ Aplikacja przygotowana przez:
+ www.diginn.pl
+ Firma FRISKO jest producentem regulatorów i sterowników swobodnie programowalnych. Firma specjalizuje się w automatyzacji:\n- małych i dużych kotłowni,\n- węzłów cieplnych,\n- układów wentylacji i klimatyzacji,\n- układów z odnawialnymi źródłami energii,\n- stacji uzdatniania wody,\n- procesów przemysłowych,\n- procesów technologicznych w przemyśle przetwórczym, rolnictwie i ogrodnictwie.
+ Zakład Elektroniki i Automatyki FRISKO s.c.\nul. Jarnołtowska 15\n54-530 Wrocław
+ frisko@frisko.pl
+ +48713492568
+ www.frisko.pl
+ Wybierz sterownik:
+ Połącz!
+ Dodaj nowy
+ Nazwa sterownika
+ Adres IP
+ Numer portu
+ Timeout
+ Typ sterownika
+ Zapisz
+ Adres slave
+ Sygnał alarmowy
+ 4
+ 502
+ 5000
+ Menu główne
+ Brak elementów
+ Trash
+ :
+ --
+
diff --git a/apk/resources/res/values/styles.xml b/apk/resources/res/values/styles.xml
new file mode 100644
index 0000000..616c7c7
--- /dev/null
+++ b/apk/resources/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/apk/sources/android/annotation/SuppressLint.java b/apk/sources/android/annotation/SuppressLint.java
new file mode 100644
index 0000000..97076b9
--- /dev/null
+++ b/apk/sources/android/annotation/SuppressLint.java
@@ -0,0 +1,13 @@
+package android.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE})
+@Retention(RetentionPolicy.CLASS)
+/* loaded from: classes.dex */
+public @interface SuppressLint {
+ String[] value();
+}
diff --git a/apk/sources/android/annotation/TargetApi.java b/apk/sources/android/annotation/TargetApi.java
new file mode 100644
index 0000000..7a9cee3
--- /dev/null
+++ b/apk/sources/android/annotation/TargetApi.java
@@ -0,0 +1,13 @@
+package android.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.CLASS)
+/* loaded from: classes.dex */
+public @interface TargetApi {
+ int value();
+}
diff --git a/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
new file mode 100644
index 0000000..7779adf
--- /dev/null
+++ b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
@@ -0,0 +1,223 @@
+package android.support.v4.accessibilityservice;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.pm.ResolveInfo;
+import android.os.Build;
+import android.support.v4.view.MotionEventCompat;
+
+/* loaded from: classes.dex */
+public class AccessibilityServiceInfoCompat {
+ public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8;
+ public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4;
+ public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2;
+ public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1;
+ public static final int DEFAULT = 1;
+ public static final int FEEDBACK_ALL_MASK = -1;
+ public static final int FEEDBACK_BRAILLE = 32;
+ public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2;
+ public static final int FLAG_REPORT_VIEW_IDS = 16;
+ public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8;
+ public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32;
+ public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4;
+ private static final AccessibilityServiceInfoVersionImpl IMPL;
+
+ interface AccessibilityServiceInfoVersionImpl {
+ boolean getCanRetrieveWindowContent(AccessibilityServiceInfo accessibilityServiceInfo);
+
+ int getCapabilities(AccessibilityServiceInfo accessibilityServiceInfo);
+
+ String getDescription(AccessibilityServiceInfo accessibilityServiceInfo);
+
+ String getId(AccessibilityServiceInfo accessibilityServiceInfo);
+
+ ResolveInfo getResolveInfo(AccessibilityServiceInfo accessibilityServiceInfo);
+
+ String getSettingsActivityName(AccessibilityServiceInfo accessibilityServiceInfo);
+ }
+
+ static class AccessibilityServiceInfoStubImpl implements AccessibilityServiceInfoVersionImpl {
+ AccessibilityServiceInfoStubImpl() {
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
+ return false;
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getDescription(AccessibilityServiceInfo info) {
+ return null;
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getId(AccessibilityServiceInfo info) {
+ return null;
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
+ return null;
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getSettingsActivityName(AccessibilityServiceInfo info) {
+ return null;
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public int getCapabilities(AccessibilityServiceInfo info) {
+ return 0;
+ }
+ }
+
+ static class AccessibilityServiceInfoIcsImpl extends AccessibilityServiceInfoStubImpl {
+ AccessibilityServiceInfoIcsImpl() {
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatIcs.getCanRetrieveWindowContent(info);
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getDescription(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatIcs.getDescription(info);
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getId(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatIcs.getId(info);
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatIcs.getResolveInfo(info);
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public String getSettingsActivityName(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatIcs.getSettingsActivityName(info);
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public int getCapabilities(AccessibilityServiceInfo info) {
+ return getCanRetrieveWindowContent(info) ? 1 : 0;
+ }
+ }
+
+ static class AccessibilityServiceInfoJellyBeanMr2 extends AccessibilityServiceInfoIcsImpl {
+ AccessibilityServiceInfoJellyBeanMr2() {
+ }
+
+ @Override // android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoIcsImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoStubImpl, android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.AccessibilityServiceInfoVersionImpl
+ public int getCapabilities(AccessibilityServiceInfo info) {
+ return AccessibilityServiceInfoCompatJellyBeanMr2.getCapabilities(info);
+ }
+ }
+
+ static {
+ if (Build.VERSION.SDK_INT >= 18) {
+ IMPL = new AccessibilityServiceInfoJellyBeanMr2();
+ } else if (Build.VERSION.SDK_INT >= 14) {
+ IMPL = new AccessibilityServiceInfoIcsImpl();
+ } else {
+ IMPL = new AccessibilityServiceInfoStubImpl();
+ }
+ }
+
+ private AccessibilityServiceInfoCompat() {
+ }
+
+ public static String getId(AccessibilityServiceInfo info) {
+ return IMPL.getId(info);
+ }
+
+ public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
+ return IMPL.getResolveInfo(info);
+ }
+
+ public static String getSettingsActivityName(AccessibilityServiceInfo info) {
+ return IMPL.getSettingsActivityName(info);
+ }
+
+ public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
+ return IMPL.getCanRetrieveWindowContent(info);
+ }
+
+ public static String getDescription(AccessibilityServiceInfo info) {
+ return IMPL.getDescription(info);
+ }
+
+ public static String feedbackTypeToString(int feedbackType) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("[");
+ while (feedbackType > 0) {
+ int feedbackTypeFlag = 1 << Integer.numberOfTrailingZeros(feedbackType);
+ feedbackType &= feedbackTypeFlag ^ (-1);
+ if (builder.length() > 1) {
+ builder.append(", ");
+ }
+ switch (feedbackTypeFlag) {
+ case 1:
+ builder.append("FEEDBACK_SPOKEN");
+ break;
+ case 2:
+ builder.append("FEEDBACK_HAPTIC");
+ break;
+ case 4:
+ builder.append("FEEDBACK_AUDIBLE");
+ break;
+ case 8:
+ builder.append("FEEDBACK_VISUAL");
+ break;
+ case 16:
+ builder.append("FEEDBACK_GENERIC");
+ break;
+ }
+ }
+ builder.append("]");
+ return builder.toString();
+ }
+
+ public static String flagToString(int flag) {
+ switch (flag) {
+ case 1:
+ return "DEFAULT";
+ case 2:
+ return "FLAG_INCLUDE_NOT_IMPORTANT_VIEWS";
+ case 4:
+ return "FLAG_REQUEST_TOUCH_EXPLORATION_MODE";
+ case 8:
+ return "FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY";
+ case 16:
+ return "FLAG_REPORT_VIEW_IDS";
+ case 32:
+ return "FLAG_REQUEST_FILTER_KEY_EVENTS";
+ default:
+ return null;
+ }
+ }
+
+ public static int getCapabilities(AccessibilityServiceInfo info) {
+ return IMPL.getCapabilities(info);
+ }
+
+ public static String capabilityToString(int capability) {
+ switch (capability) {
+ case 1:
+ return "CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT";
+ case 2:
+ return "CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION";
+ case 3:
+ case 5:
+ case 6:
+ case MotionEventCompat.ACTION_HOVER_MOVE /* 7 */:
+ default:
+ return "UNKNOWN";
+ case 4:
+ return "CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY";
+ case 8:
+ return "CAPABILITY_CAN_FILTER_KEY_EVENTS";
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
new file mode 100644
index 0000000..4e40778
--- /dev/null
+++ b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.java
@@ -0,0 +1,30 @@
+package android.support.v4.accessibilityservice;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.pm.ResolveInfo;
+
+/* loaded from: classes.dex */
+class AccessibilityServiceInfoCompatIcs {
+ AccessibilityServiceInfoCompatIcs() {
+ }
+
+ public static boolean getCanRetrieveWindowContent(AccessibilityServiceInfo info) {
+ return info.getCanRetrieveWindowContent();
+ }
+
+ public static String getDescription(AccessibilityServiceInfo info) {
+ return info.getDescription();
+ }
+
+ public static String getId(AccessibilityServiceInfo info) {
+ return info.getId();
+ }
+
+ public static ResolveInfo getResolveInfo(AccessibilityServiceInfo info) {
+ return info.getResolveInfo();
+ }
+
+ public static String getSettingsActivityName(AccessibilityServiceInfo info) {
+ return info.getSettingsActivityName();
+ }
+}
diff --git a/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
new file mode 100644
index 0000000..fee822f
--- /dev/null
+++ b/apk/sources/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2.java
@@ -0,0 +1,13 @@
+package android.support.v4.accessibilityservice;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+
+/* loaded from: classes.dex */
+class AccessibilityServiceInfoCompatJellyBeanMr2 {
+ AccessibilityServiceInfoCompatJellyBeanMr2() {
+ }
+
+ public static int getCapabilities(AccessibilityServiceInfo info) {
+ return info.getCapabilities();
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActionBarDrawerToggle.java b/apk/sources/android/support/v4/app/ActionBarDrawerToggle.java
new file mode 100644
index 0000000..685b43b
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActionBarDrawerToggle.java
@@ -0,0 +1,262 @@
+package android.support.v4.app;
+
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LevelListDrawable;
+import android.os.Build;
+import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.view.MenuItem;
+import android.view.View;
+
+/* loaded from: classes.dex */
+public class ActionBarDrawerToggle implements DrawerLayout.DrawerListener {
+ private static final int ID_HOME = 16908332;
+ private static final ActionBarDrawerToggleImpl IMPL;
+ private static final float TOGGLE_DRAWABLE_OFFSET = 0.33333334f;
+ private final Activity mActivity;
+ private final Delegate mActivityImpl;
+ private final int mCloseDrawerContentDescRes;
+ private Drawable mDrawerImage;
+ private final int mDrawerImageResource;
+ private boolean mDrawerIndicatorEnabled = true;
+ private final DrawerLayout mDrawerLayout;
+ private final int mOpenDrawerContentDescRes;
+ private Object mSetIndicatorInfo;
+ private SlideDrawable mSlider;
+ private Drawable mThemeImage;
+
+ private interface ActionBarDrawerToggleImpl {
+ Drawable getThemeUpIndicator(Activity activity);
+
+ Object setActionBarDescription(Object obj, Activity activity, int i);
+
+ Object setActionBarUpIndicator(Object obj, Activity activity, Drawable drawable, int i);
+ }
+
+ public interface Delegate {
+ Drawable getThemeUpIndicator();
+
+ void setActionBarDescription(int i);
+
+ void setActionBarUpIndicator(Drawable drawable, int i);
+ }
+
+ public interface DelegateProvider {
+ Delegate getDrawerToggleDelegate();
+ }
+
+ private static class ActionBarDrawerToggleImplBase implements ActionBarDrawerToggleImpl {
+ private ActionBarDrawerToggleImplBase() {
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Drawable getThemeUpIndicator(Activity activity) {
+ return null;
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Object setActionBarUpIndicator(Object info, Activity activity, Drawable themeImage, int contentDescRes) {
+ return info;
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Object setActionBarDescription(Object info, Activity activity, int contentDescRes) {
+ return info;
+ }
+ }
+
+ private static class ActionBarDrawerToggleImplHC implements ActionBarDrawerToggleImpl {
+ private ActionBarDrawerToggleImplHC() {
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Drawable getThemeUpIndicator(Activity activity) {
+ return ActionBarDrawerToggleHoneycomb.getThemeUpIndicator(activity);
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Object setActionBarUpIndicator(Object info, Activity activity, Drawable themeImage, int contentDescRes) {
+ return ActionBarDrawerToggleHoneycomb.setActionBarUpIndicator(info, activity, themeImage, contentDescRes);
+ }
+
+ @Override // android.support.v4.app.ActionBarDrawerToggle.ActionBarDrawerToggleImpl
+ public Object setActionBarDescription(Object info, Activity activity, int contentDescRes) {
+ return ActionBarDrawerToggleHoneycomb.setActionBarDescription(info, activity, contentDescRes);
+ }
+ }
+
+ static {
+ int version = Build.VERSION.SDK_INT;
+ if (version >= 11) {
+ IMPL = new ActionBarDrawerToggleImplHC();
+ } else {
+ IMPL = new ActionBarDrawerToggleImplBase();
+ }
+ }
+
+ /* JADX WARN: Multi-variable type inference failed */
+ public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
+ this.mActivity = activity;
+ if (activity instanceof DelegateProvider) {
+ this.mActivityImpl = ((DelegateProvider) activity).getDrawerToggleDelegate();
+ } else {
+ this.mActivityImpl = null;
+ }
+ this.mDrawerLayout = drawerLayout;
+ this.mDrawerImageResource = drawerImageRes;
+ this.mOpenDrawerContentDescRes = openDrawerContentDescRes;
+ this.mCloseDrawerContentDescRes = closeDrawerContentDescRes;
+ this.mThemeImage = getThemeUpIndicator();
+ this.mDrawerImage = activity.getResources().getDrawable(drawerImageRes);
+ this.mSlider = new SlideDrawable(this.mDrawerImage);
+ this.mSlider.setOffset(TOGGLE_DRAWABLE_OFFSET);
+ }
+
+ public void syncState() {
+ if (this.mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ this.mSlider.setPosition(1.0f);
+ } else {
+ this.mSlider.setPosition(0.0f);
+ }
+ if (this.mDrawerIndicatorEnabled) {
+ setActionBarUpIndicator(this.mSlider, this.mDrawerLayout.isDrawerOpen(GravityCompat.START) ? this.mCloseDrawerContentDescRes : this.mOpenDrawerContentDescRes);
+ }
+ }
+
+ public void setDrawerIndicatorEnabled(boolean enable) {
+ if (enable != this.mDrawerIndicatorEnabled) {
+ if (enable) {
+ setActionBarUpIndicator(this.mSlider, this.mDrawerLayout.isDrawerOpen(GravityCompat.START) ? this.mCloseDrawerContentDescRes : this.mOpenDrawerContentDescRes);
+ } else {
+ setActionBarUpIndicator(this.mThemeImage, 0);
+ }
+ this.mDrawerIndicatorEnabled = enable;
+ }
+ }
+
+ public boolean isDrawerIndicatorEnabled() {
+ return this.mDrawerIndicatorEnabled;
+ }
+
+ public void onConfigurationChanged(Configuration newConfig) {
+ this.mThemeImage = getThemeUpIndicator();
+ this.mDrawerImage = this.mActivity.getResources().getDrawable(this.mDrawerImageResource);
+ syncState();
+ }
+
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item != null && item.getItemId() == 16908332 && this.mDrawerIndicatorEnabled) {
+ if (this.mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
+ this.mDrawerLayout.closeDrawer(GravityCompat.START);
+ } else {
+ this.mDrawerLayout.openDrawer(GravityCompat.START);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override // android.support.v4.widget.DrawerLayout.DrawerListener
+ public void onDrawerSlide(View drawerView, float slideOffset) {
+ float glyphOffset;
+ float glyphOffset2 = this.mSlider.getPosition();
+ if (slideOffset > 0.5f) {
+ glyphOffset = Math.max(glyphOffset2, Math.max(0.0f, slideOffset - 0.5f) * 2.0f);
+ } else {
+ glyphOffset = Math.min(glyphOffset2, slideOffset * 2.0f);
+ }
+ this.mSlider.setPosition(glyphOffset);
+ }
+
+ @Override // android.support.v4.widget.DrawerLayout.DrawerListener
+ public void onDrawerOpened(View drawerView) {
+ this.mSlider.setPosition(1.0f);
+ if (this.mDrawerIndicatorEnabled) {
+ setActionBarDescription(this.mCloseDrawerContentDescRes);
+ }
+ }
+
+ @Override // android.support.v4.widget.DrawerLayout.DrawerListener
+ public void onDrawerClosed(View drawerView) {
+ this.mSlider.setPosition(0.0f);
+ if (this.mDrawerIndicatorEnabled) {
+ setActionBarDescription(this.mOpenDrawerContentDescRes);
+ }
+ }
+
+ @Override // android.support.v4.widget.DrawerLayout.DrawerListener
+ public void onDrawerStateChanged(int newState) {
+ }
+
+ Drawable getThemeUpIndicator() {
+ return this.mActivityImpl != null ? this.mActivityImpl.getThemeUpIndicator() : IMPL.getThemeUpIndicator(this.mActivity);
+ }
+
+ void setActionBarUpIndicator(Drawable upDrawable, int contentDescRes) {
+ if (this.mActivityImpl != null) {
+ this.mActivityImpl.setActionBarUpIndicator(upDrawable, contentDescRes);
+ } else {
+ this.mSetIndicatorInfo = IMPL.setActionBarUpIndicator(this.mSetIndicatorInfo, this.mActivity, upDrawable, contentDescRes);
+ }
+ }
+
+ void setActionBarDescription(int contentDescRes) {
+ if (this.mActivityImpl != null) {
+ this.mActivityImpl.setActionBarDescription(contentDescRes);
+ } else {
+ this.mSetIndicatorInfo = IMPL.setActionBarDescription(this.mSetIndicatorInfo, this.mActivity, contentDescRes);
+ }
+ }
+
+ private class SlideDrawable extends LevelListDrawable implements Drawable.Callback {
+ private final boolean mHasMirroring;
+ private float mOffset;
+ private float mPosition;
+ private final Rect mTmpRect;
+
+ private SlideDrawable(Drawable wrapped) {
+ this.mHasMirroring = Build.VERSION.SDK_INT > 18;
+ this.mTmpRect = new Rect();
+ if (DrawableCompat.isAutoMirrored(wrapped)) {
+ DrawableCompat.setAutoMirrored(this, true);
+ }
+ addLevel(0, 0, wrapped);
+ }
+
+ public void setPosition(float position) {
+ this.mPosition = position;
+ invalidateSelf();
+ }
+
+ public float getPosition() {
+ return this.mPosition;
+ }
+
+ public void setOffset(float offset) {
+ this.mOffset = offset;
+ invalidateSelf();
+ }
+
+ @Override // android.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
+ public void draw(Canvas canvas) {
+ copyBounds(this.mTmpRect);
+ canvas.save();
+ boolean isLayoutRTL = ViewCompat.getLayoutDirection(ActionBarDrawerToggle.this.mActivity.getWindow().getDecorView()) == 1;
+ int flipRtl = isLayoutRTL ? -1 : 1;
+ int width = this.mTmpRect.width();
+ canvas.translate((-this.mOffset) * width * this.mPosition * flipRtl, 0.0f);
+ if (isLayoutRTL && !this.mHasMirroring) {
+ canvas.translate(width, 0.0f);
+ canvas.scale(-1.0f, 1.0f);
+ }
+ super.draw(canvas);
+ canvas.restore();
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java b/apk/sources/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
new file mode 100644
index 0000000..d53d290
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
@@ -0,0 +1,93 @@
+package android.support.v4.app;
+
+import android.R;
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/* loaded from: classes.dex */
+class ActionBarDrawerToggleHoneycomb {
+ private static final String TAG = "ActionBarDrawerToggleHoneycomb";
+ private static final int[] THEME_ATTRS = {R.attr.homeAsUpIndicator};
+
+ ActionBarDrawerToggleHoneycomb() {
+ }
+
+ public static Object setActionBarUpIndicator(Object info, Activity activity, Drawable drawable, int contentDescRes) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ if (info == null) {
+ info = new SetIndicatorInfo(activity);
+ }
+ SetIndicatorInfo sii = (SetIndicatorInfo) info;
+ if (sii.setHomeAsUpIndicator != null) {
+ try {
+ ActionBar actionBar = activity.getActionBar();
+ sii.setHomeAsUpIndicator.invoke(actionBar, drawable);
+ sii.setHomeActionContentDescription.invoke(actionBar, Integer.valueOf(contentDescRes));
+ } catch (Exception e) {
+ Log.w(TAG, "Couldn't set home-as-up indicator via JB-MR2 API", e);
+ }
+ } else if (sii.upIndicatorView != null) {
+ sii.upIndicatorView.setImageDrawable(drawable);
+ } else {
+ Log.w(TAG, "Couldn't set home-as-up indicator");
+ }
+ return info;
+ }
+
+ public static Object setActionBarDescription(Object info, Activity activity, int contentDescRes) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ if (info == null) {
+ info = new SetIndicatorInfo(activity);
+ }
+ SetIndicatorInfo sii = (SetIndicatorInfo) info;
+ if (sii.setHomeAsUpIndicator != null) {
+ try {
+ ActionBar actionBar = activity.getActionBar();
+ sii.setHomeActionContentDescription.invoke(actionBar, Integer.valueOf(contentDescRes));
+ } catch (Exception e) {
+ Log.w(TAG, "Couldn't set content description via JB-MR2 API", e);
+ }
+ }
+ return info;
+ }
+
+ public static Drawable getThemeUpIndicator(Activity activity) {
+ TypedArray a = activity.obtainStyledAttributes(THEME_ATTRS);
+ Drawable result = a.getDrawable(0);
+ a.recycle();
+ return result;
+ }
+
+ private static class SetIndicatorInfo {
+ public Method setHomeActionContentDescription;
+ public Method setHomeAsUpIndicator;
+ public ImageView upIndicatorView;
+
+ SetIndicatorInfo(Activity activity) {
+ try {
+ this.setHomeAsUpIndicator = ActionBar.class.getDeclaredMethod("setHomeAsUpIndicator", Drawable.class);
+ this.setHomeActionContentDescription = ActionBar.class.getDeclaredMethod("setHomeActionContentDescription", Integer.TYPE);
+ } catch (NoSuchMethodException e) {
+ View home = activity.findViewById(R.id.home);
+ if (home != null) {
+ ViewGroup parent = (ViewGroup) home.getParent();
+ int childCount = parent.getChildCount();
+ if (childCount == 2) {
+ View first = parent.getChildAt(0);
+ View second = parent.getChildAt(1);
+ View up = first.getId() == 16908332 ? second : first;
+ if (up instanceof ImageView) {
+ this.upIndicatorView = (ImageView) up;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActivityCompat.java b/apk/sources/android/support/v4/app/ActivityCompat.java
new file mode 100644
index 0000000..cd1bbcf
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActivityCompat.java
@@ -0,0 +1,42 @@
+package android.support.v4.app;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.content.ContextCompat;
+
+/* loaded from: classes.dex */
+public class ActivityCompat extends ContextCompat {
+ public static boolean invalidateOptionsMenu(Activity activity) {
+ if (Build.VERSION.SDK_INT < 11) {
+ return false;
+ }
+ ActivityCompatHoneycomb.invalidateOptionsMenu(activity);
+ return true;
+ }
+
+ public static void startActivity(Activity activity, Intent intent, Bundle options) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ActivityCompatJB.startActivity(activity, intent, options);
+ } else {
+ activity.startActivity(intent);
+ }
+ }
+
+ public static void startActivityForResult(Activity activity, Intent intent, int requestCode, Bundle options) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ActivityCompatJB.startActivityForResult(activity, intent, requestCode, options);
+ } else {
+ activity.startActivityForResult(intent, requestCode);
+ }
+ }
+
+ public static void finishAffinity(Activity activity) {
+ if (Build.VERSION.SDK_INT >= 16) {
+ ActivityCompatJB.finishAffinity(activity);
+ } else {
+ activity.finish();
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActivityCompatHoneycomb.java b/apk/sources/android/support/v4/app/ActivityCompatHoneycomb.java
new file mode 100644
index 0000000..fc2218d
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActivityCompatHoneycomb.java
@@ -0,0 +1,19 @@
+package android.support.v4.app;
+
+import android.app.Activity;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/* loaded from: classes.dex */
+class ActivityCompatHoneycomb {
+ ActivityCompatHoneycomb() {
+ }
+
+ static void invalidateOptionsMenu(Activity activity) {
+ activity.invalidateOptionsMenu();
+ }
+
+ static void dump(Activity activity, String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ activity.dump(prefix, fd, writer, args);
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActivityCompatJB.java b/apk/sources/android/support/v4/app/ActivityCompatJB.java
new file mode 100644
index 0000000..300ceb1
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActivityCompatJB.java
@@ -0,0 +1,24 @@
+package android.support.v4.app;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+/* loaded from: classes.dex */
+class ActivityCompatJB {
+ ActivityCompatJB() {
+ }
+
+ public static void startActivity(Context context, Intent intent, Bundle options) {
+ context.startActivity(intent, options);
+ }
+
+ public static void startActivityForResult(Activity activity, Intent intent, int requestCode, Bundle options) {
+ activity.startActivityForResult(intent, requestCode, options);
+ }
+
+ public static void finishAffinity(Activity activity) {
+ activity.finishAffinity();
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActivityOptionsCompat.java b/apk/sources/android/support/v4/app/ActivityOptionsCompat.java
new file mode 100644
index 0000000..592e82d
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActivityOptionsCompat.java
@@ -0,0 +1,53 @@
+package android.support.v4.app;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+
+/* loaded from: classes.dex */
+public class ActivityOptionsCompat {
+ public static ActivityOptionsCompat makeCustomAnimation(Context context, int enterResId, int exitResId) {
+ return Build.VERSION.SDK_INT >= 16 ? new ActivityOptionsImplJB(ActivityOptionsCompatJB.makeCustomAnimation(context, enterResId, exitResId)) : new ActivityOptionsCompat();
+ }
+
+ public static ActivityOptionsCompat makeScaleUpAnimation(View source, int startX, int startY, int startWidth, int startHeight) {
+ return Build.VERSION.SDK_INT >= 16 ? new ActivityOptionsImplJB(ActivityOptionsCompatJB.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight)) : new ActivityOptionsCompat();
+ }
+
+ public static ActivityOptionsCompat makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY) {
+ return Build.VERSION.SDK_INT >= 16 ? new ActivityOptionsImplJB(ActivityOptionsCompatJB.makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY)) : new ActivityOptionsCompat();
+ }
+
+ private static class ActivityOptionsImplJB extends ActivityOptionsCompat {
+ private final ActivityOptionsCompatJB mImpl;
+
+ ActivityOptionsImplJB(ActivityOptionsCompatJB impl) {
+ this.mImpl = impl;
+ }
+
+ @Override // android.support.v4.app.ActivityOptionsCompat
+ public Bundle toBundle() {
+ return this.mImpl.toBundle();
+ }
+
+ @Override // android.support.v4.app.ActivityOptionsCompat
+ public void update(ActivityOptionsCompat otherOptions) {
+ if (otherOptions instanceof ActivityOptionsImplJB) {
+ ActivityOptionsImplJB otherImpl = (ActivityOptionsImplJB) otherOptions;
+ this.mImpl.update(otherImpl.mImpl);
+ }
+ }
+ }
+
+ protected ActivityOptionsCompat() {
+ }
+
+ public Bundle toBundle() {
+ return null;
+ }
+
+ public void update(ActivityOptionsCompat otherOptions) {
+ }
+}
diff --git a/apk/sources/android/support/v4/app/ActivityOptionsCompatJB.java b/apk/sources/android/support/v4/app/ActivityOptionsCompatJB.java
new file mode 100644
index 0000000..97214e3
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ActivityOptionsCompatJB.java
@@ -0,0 +1,36 @@
+package android.support.v4.app;
+
+import android.app.ActivityOptions;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.view.View;
+
+/* loaded from: classes.dex */
+class ActivityOptionsCompatJB {
+ private final ActivityOptions mActivityOptions;
+
+ public static ActivityOptionsCompatJB makeCustomAnimation(Context context, int enterResId, int exitResId) {
+ return new ActivityOptionsCompatJB(ActivityOptions.makeCustomAnimation(context, enterResId, exitResId));
+ }
+
+ public static ActivityOptionsCompatJB makeScaleUpAnimation(View source, int startX, int startY, int startWidth, int startHeight) {
+ return new ActivityOptionsCompatJB(ActivityOptions.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight));
+ }
+
+ public static ActivityOptionsCompatJB makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY) {
+ return new ActivityOptionsCompatJB(ActivityOptions.makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY));
+ }
+
+ private ActivityOptionsCompatJB(ActivityOptions activityOptions) {
+ this.mActivityOptions = activityOptions;
+ }
+
+ public Bundle toBundle() {
+ return this.mActivityOptions.toBundle();
+ }
+
+ public void update(ActivityOptionsCompatJB otherOptions) {
+ this.mActivityOptions.update(otherOptions.mActivityOptions);
+ }
+}
diff --git a/apk/sources/android/support/v4/app/BackStackRecord.java b/apk/sources/android/support/v4/app/BackStackRecord.java
new file mode 100644
index 0000000..ee39ddc
--- /dev/null
+++ b/apk/sources/android/support/v4/app/BackStackRecord.java
@@ -0,0 +1,654 @@
+package android.support.v4.app;
+
+import android.support.v4.app.FragmentManager;
+import android.support.v4.util.LogWriter;
+import android.util.Log;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+/* loaded from: classes.dex */
+final class BackStackRecord extends FragmentTransaction implements FragmentManager.BackStackEntry, Runnable {
+ static final int OP_ADD = 1;
+ static final int OP_ATTACH = 7;
+ static final int OP_DETACH = 6;
+ static final int OP_HIDE = 4;
+ static final int OP_NULL = 0;
+ static final int OP_REMOVE = 3;
+ static final int OP_REPLACE = 2;
+ static final int OP_SHOW = 5;
+ static final String TAG = "FragmentManager";
+ boolean mAddToBackStack;
+ int mBreadCrumbShortTitleRes;
+ CharSequence mBreadCrumbShortTitleText;
+ int mBreadCrumbTitleRes;
+ CharSequence mBreadCrumbTitleText;
+ boolean mCommitted;
+ int mEnterAnim;
+ int mExitAnim;
+ Op mHead;
+ final FragmentManagerImpl mManager;
+ String mName;
+ int mNumOp;
+ int mPopEnterAnim;
+ int mPopExitAnim;
+ Op mTail;
+ int mTransition;
+ int mTransitionStyle;
+ boolean mAllowAddToBackStack = true;
+ int mIndex = -1;
+
+ static final class Op {
+ int cmd;
+ int enterAnim;
+ int exitAnim;
+ Fragment fragment;
+ Op next;
+ int popEnterAnim;
+ int popExitAnim;
+ Op prev;
+ ArrayList removed;
+
+ Op() {
+ }
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("BackStackEntry{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ if (this.mIndex >= 0) {
+ sb.append(" #");
+ sb.append(this.mIndex);
+ }
+ if (this.mName != null) {
+ sb.append(" ");
+ sb.append(this.mName);
+ }
+ sb.append("}");
+ return sb.toString();
+ }
+
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ dump(prefix, writer, true);
+ }
+
+ public void dump(String prefix, PrintWriter writer, boolean full) {
+ String cmdStr;
+ if (full) {
+ writer.print(prefix);
+ writer.print("mName=");
+ writer.print(this.mName);
+ writer.print(" mIndex=");
+ writer.print(this.mIndex);
+ writer.print(" mCommitted=");
+ writer.println(this.mCommitted);
+ if (this.mTransition != 0) {
+ writer.print(prefix);
+ writer.print("mTransition=#");
+ writer.print(Integer.toHexString(this.mTransition));
+ writer.print(" mTransitionStyle=#");
+ writer.println(Integer.toHexString(this.mTransitionStyle));
+ }
+ if (this.mEnterAnim != 0 || this.mExitAnim != 0) {
+ writer.print(prefix);
+ writer.print("mEnterAnim=#");
+ writer.print(Integer.toHexString(this.mEnterAnim));
+ writer.print(" mExitAnim=#");
+ writer.println(Integer.toHexString(this.mExitAnim));
+ }
+ if (this.mPopEnterAnim != 0 || this.mPopExitAnim != 0) {
+ writer.print(prefix);
+ writer.print("mPopEnterAnim=#");
+ writer.print(Integer.toHexString(this.mPopEnterAnim));
+ writer.print(" mPopExitAnim=#");
+ writer.println(Integer.toHexString(this.mPopExitAnim));
+ }
+ if (this.mBreadCrumbTitleRes != 0 || this.mBreadCrumbTitleText != null) {
+ writer.print(prefix);
+ writer.print("mBreadCrumbTitleRes=#");
+ writer.print(Integer.toHexString(this.mBreadCrumbTitleRes));
+ writer.print(" mBreadCrumbTitleText=");
+ writer.println(this.mBreadCrumbTitleText);
+ }
+ if (this.mBreadCrumbShortTitleRes != 0 || this.mBreadCrumbShortTitleText != null) {
+ writer.print(prefix);
+ writer.print("mBreadCrumbShortTitleRes=#");
+ writer.print(Integer.toHexString(this.mBreadCrumbShortTitleRes));
+ writer.print(" mBreadCrumbShortTitleText=");
+ writer.println(this.mBreadCrumbShortTitleText);
+ }
+ }
+ if (this.mHead != null) {
+ writer.print(prefix);
+ writer.println("Operations:");
+ String innerPrefix = prefix + " ";
+ Op op = this.mHead;
+ int num = 0;
+ while (op != null) {
+ switch (op.cmd) {
+ case 0:
+ cmdStr = "NULL";
+ break;
+ case 1:
+ cmdStr = "ADD";
+ break;
+ case 2:
+ cmdStr = "REPLACE";
+ break;
+ case 3:
+ cmdStr = "REMOVE";
+ break;
+ case 4:
+ cmdStr = "HIDE";
+ break;
+ case 5:
+ cmdStr = "SHOW";
+ break;
+ case 6:
+ cmdStr = "DETACH";
+ break;
+ case 7:
+ cmdStr = "ATTACH";
+ break;
+ default:
+ cmdStr = "cmd=" + op.cmd;
+ break;
+ }
+ writer.print(prefix);
+ writer.print(" Op #");
+ writer.print(num);
+ writer.print(": ");
+ writer.print(cmdStr);
+ writer.print(" ");
+ writer.println(op.fragment);
+ if (full) {
+ if (op.enterAnim != 0 || op.exitAnim != 0) {
+ writer.print(prefix);
+ writer.print("enterAnim=#");
+ writer.print(Integer.toHexString(op.enterAnim));
+ writer.print(" exitAnim=#");
+ writer.println(Integer.toHexString(op.exitAnim));
+ }
+ if (op.popEnterAnim != 0 || op.popExitAnim != 0) {
+ writer.print(prefix);
+ writer.print("popEnterAnim=#");
+ writer.print(Integer.toHexString(op.popEnterAnim));
+ writer.print(" popExitAnim=#");
+ writer.println(Integer.toHexString(op.popExitAnim));
+ }
+ }
+ if (op.removed != null && op.removed.size() > 0) {
+ for (int i = 0; i < op.removed.size(); i++) {
+ writer.print(innerPrefix);
+ if (op.removed.size() == 1) {
+ writer.print("Removed: ");
+ } else {
+ if (i == 0) {
+ writer.println("Removed:");
+ }
+ writer.print(innerPrefix);
+ writer.print(" #");
+ writer.print(i);
+ writer.print(": ");
+ }
+ writer.println(op.removed.get(i));
+ }
+ }
+ op = op.next;
+ num++;
+ }
+ }
+ }
+
+ public BackStackRecord(FragmentManagerImpl manager) {
+ this.mManager = manager;
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public int getId() {
+ return this.mIndex;
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public int getBreadCrumbTitleRes() {
+ return this.mBreadCrumbTitleRes;
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public int getBreadCrumbShortTitleRes() {
+ return this.mBreadCrumbShortTitleRes;
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public CharSequence getBreadCrumbTitle() {
+ return this.mBreadCrumbTitleRes != 0 ? this.mManager.mActivity.getText(this.mBreadCrumbTitleRes) : this.mBreadCrumbTitleText;
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public CharSequence getBreadCrumbShortTitle() {
+ return this.mBreadCrumbShortTitleRes != 0 ? this.mManager.mActivity.getText(this.mBreadCrumbShortTitleRes) : this.mBreadCrumbShortTitleText;
+ }
+
+ void addOp(Op op) {
+ if (this.mHead == null) {
+ this.mTail = op;
+ this.mHead = op;
+ } else {
+ op.prev = this.mTail;
+ this.mTail.next = op;
+ this.mTail = op;
+ }
+ op.enterAnim = this.mEnterAnim;
+ op.exitAnim = this.mExitAnim;
+ op.popEnterAnim = this.mPopEnterAnim;
+ op.popExitAnim = this.mPopExitAnim;
+ this.mNumOp++;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction add(Fragment fragment, String tag) {
+ doAddOp(0, fragment, tag, 1);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction add(int containerViewId, Fragment fragment) {
+ doAddOp(containerViewId, fragment, null, 1);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction add(int containerViewId, Fragment fragment, String tag) {
+ doAddOp(containerViewId, fragment, tag, 1);
+ return this;
+ }
+
+ private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) {
+ fragment.mFragmentManager = this.mManager;
+ if (tag != null) {
+ if (fragment.mTag != null && !tag.equals(fragment.mTag)) {
+ throw new IllegalStateException("Can't change tag of fragment " + fragment + ": was " + fragment.mTag + " now " + tag);
+ }
+ fragment.mTag = tag;
+ }
+ if (containerViewId != 0) {
+ if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) {
+ throw new IllegalStateException("Can't change container ID of fragment " + fragment + ": was " + fragment.mFragmentId + " now " + containerViewId);
+ }
+ fragment.mFragmentId = containerViewId;
+ fragment.mContainerId = containerViewId;
+ }
+ Op op = new Op();
+ op.cmd = opcmd;
+ op.fragment = fragment;
+ addOp(op);
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction replace(int containerViewId, Fragment fragment) {
+ return replace(containerViewId, fragment, null);
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) {
+ if (containerViewId == 0) {
+ throw new IllegalArgumentException("Must use non-zero containerViewId");
+ }
+ doAddOp(containerViewId, fragment, tag, 2);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction remove(Fragment fragment) {
+ Op op = new Op();
+ op.cmd = 3;
+ op.fragment = fragment;
+ addOp(op);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction hide(Fragment fragment) {
+ Op op = new Op();
+ op.cmd = 4;
+ op.fragment = fragment;
+ addOp(op);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction show(Fragment fragment) {
+ Op op = new Op();
+ op.cmd = 5;
+ op.fragment = fragment;
+ addOp(op);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction detach(Fragment fragment) {
+ Op op = new Op();
+ op.cmd = 6;
+ op.fragment = fragment;
+ addOp(op);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction attach(Fragment fragment) {
+ Op op = new Op();
+ op.cmd = 7;
+ op.fragment = fragment;
+ addOp(op);
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setCustomAnimations(int enter, int exit) {
+ return setCustomAnimations(enter, exit, 0, 0);
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setCustomAnimations(int enter, int exit, int popEnter, int popExit) {
+ this.mEnterAnim = enter;
+ this.mExitAnim = exit;
+ this.mPopEnterAnim = popEnter;
+ this.mPopExitAnim = popExit;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setTransition(int transition) {
+ this.mTransition = transition;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setTransitionStyle(int styleRes) {
+ this.mTransitionStyle = styleRes;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction addToBackStack(String name) {
+ if (!this.mAllowAddToBackStack) {
+ throw new IllegalStateException("This FragmentTransaction is not allowed to be added to the back stack.");
+ }
+ this.mAddToBackStack = true;
+ this.mName = name;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public boolean isAddToBackStackAllowed() {
+ return this.mAllowAddToBackStack;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction disallowAddToBackStack() {
+ if (this.mAddToBackStack) {
+ throw new IllegalStateException("This transaction is already being added to the back stack");
+ }
+ this.mAllowAddToBackStack = false;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setBreadCrumbTitle(int res) {
+ this.mBreadCrumbTitleRes = res;
+ this.mBreadCrumbTitleText = null;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setBreadCrumbTitle(CharSequence text) {
+ this.mBreadCrumbTitleRes = 0;
+ this.mBreadCrumbTitleText = text;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setBreadCrumbShortTitle(int res) {
+ this.mBreadCrumbShortTitleRes = res;
+ this.mBreadCrumbShortTitleText = null;
+ return this;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public FragmentTransaction setBreadCrumbShortTitle(CharSequence text) {
+ this.mBreadCrumbShortTitleRes = 0;
+ this.mBreadCrumbShortTitleText = text;
+ return this;
+ }
+
+ void bumpBackStackNesting(int amt) {
+ if (this.mAddToBackStack) {
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Bump nesting in " + this + " by " + amt);
+ }
+ for (Op op = this.mHead; op != null; op = op.next) {
+ if (op.fragment != null) {
+ op.fragment.mBackStackNesting += amt;
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Bump nesting of " + op.fragment + " to " + op.fragment.mBackStackNesting);
+ }
+ }
+ if (op.removed != null) {
+ for (int i = op.removed.size() - 1; i >= 0; i--) {
+ Fragment r = op.removed.get(i);
+ r.mBackStackNesting += amt;
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Bump nesting of " + r + " to " + r.mBackStackNesting);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public int commit() {
+ return commitInternal(false);
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public int commitAllowingStateLoss() {
+ return commitInternal(true);
+ }
+
+ int commitInternal(boolean allowStateLoss) {
+ if (this.mCommitted) {
+ throw new IllegalStateException("commit already called");
+ }
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Commit: " + this);
+ LogWriter logw = new LogWriter(TAG);
+ PrintWriter pw = new PrintWriter(logw);
+ dump(" ", null, pw, null);
+ }
+ this.mCommitted = true;
+ if (this.mAddToBackStack) {
+ this.mIndex = this.mManager.allocBackStackIndex(this);
+ } else {
+ this.mIndex = -1;
+ }
+ this.mManager.enqueueAction(this, allowStateLoss);
+ return this.mIndex;
+ }
+
+ @Override // java.lang.Runnable
+ public void run() {
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Run: " + this);
+ }
+ if (this.mAddToBackStack && this.mIndex < 0) {
+ throw new IllegalStateException("addToBackStack() called after commit()");
+ }
+ bumpBackStackNesting(1);
+ for (Op op = this.mHead; op != null; op = op.next) {
+ switch (op.cmd) {
+ case 1:
+ Fragment f = op.fragment;
+ f.mNextAnim = op.enterAnim;
+ this.mManager.addFragment(f, false);
+ break;
+ case 2:
+ Fragment f2 = op.fragment;
+ if (this.mManager.mAdded != null) {
+ for (int i = 0; i < this.mManager.mAdded.size(); i++) {
+ Fragment old = this.mManager.mAdded.get(i);
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "OP_REPLACE: adding=" + f2 + " old=" + old);
+ }
+ if (f2 == null || old.mContainerId == f2.mContainerId) {
+ if (old == f2) {
+ f2 = null;
+ op.fragment = null;
+ } else {
+ if (op.removed == null) {
+ op.removed = new ArrayList<>();
+ }
+ op.removed.add(old);
+ old.mNextAnim = op.exitAnim;
+ if (this.mAddToBackStack) {
+ old.mBackStackNesting++;
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "Bump nesting of " + old + " to " + old.mBackStackNesting);
+ }
+ }
+ this.mManager.removeFragment(old, this.mTransition, this.mTransitionStyle);
+ }
+ }
+ }
+ }
+ if (f2 != null) {
+ f2.mNextAnim = op.enterAnim;
+ this.mManager.addFragment(f2, false);
+ break;
+ } else {
+ break;
+ }
+ break;
+ case 3:
+ Fragment f3 = op.fragment;
+ f3.mNextAnim = op.exitAnim;
+ this.mManager.removeFragment(f3, this.mTransition, this.mTransitionStyle);
+ break;
+ case 4:
+ Fragment f4 = op.fragment;
+ f4.mNextAnim = op.exitAnim;
+ this.mManager.hideFragment(f4, this.mTransition, this.mTransitionStyle);
+ break;
+ case 5:
+ Fragment f5 = op.fragment;
+ f5.mNextAnim = op.enterAnim;
+ this.mManager.showFragment(f5, this.mTransition, this.mTransitionStyle);
+ break;
+ case 6:
+ Fragment f6 = op.fragment;
+ f6.mNextAnim = op.exitAnim;
+ this.mManager.detachFragment(f6, this.mTransition, this.mTransitionStyle);
+ break;
+ case 7:
+ Fragment f7 = op.fragment;
+ f7.mNextAnim = op.enterAnim;
+ this.mManager.attachFragment(f7, this.mTransition, this.mTransitionStyle);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
+ }
+ }
+ this.mManager.moveToState(this.mManager.mCurState, this.mTransition, this.mTransitionStyle, true);
+ if (this.mAddToBackStack) {
+ this.mManager.addBackStackState(this);
+ }
+ }
+
+ public void popFromBackStack(boolean doStateMove) {
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "popFromBackStack: " + this);
+ LogWriter logw = new LogWriter(TAG);
+ PrintWriter pw = new PrintWriter(logw);
+ dump(" ", null, pw, null);
+ }
+ bumpBackStackNesting(-1);
+ for (Op op = this.mTail; op != null; op = op.prev) {
+ switch (op.cmd) {
+ case 1:
+ Fragment f = op.fragment;
+ f.mNextAnim = op.popExitAnim;
+ this.mManager.removeFragment(f, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ break;
+ case 2:
+ Fragment f2 = op.fragment;
+ if (f2 != null) {
+ f2.mNextAnim = op.popExitAnim;
+ this.mManager.removeFragment(f2, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ }
+ if (op.removed != null) {
+ for (int i = 0; i < op.removed.size(); i++) {
+ Fragment old = op.removed.get(i);
+ old.mNextAnim = op.popEnterAnim;
+ this.mManager.addFragment(old, false);
+ }
+ break;
+ } else {
+ break;
+ }
+ case 3:
+ Fragment f3 = op.fragment;
+ f3.mNextAnim = op.popEnterAnim;
+ this.mManager.addFragment(f3, false);
+ break;
+ case 4:
+ Fragment f4 = op.fragment;
+ f4.mNextAnim = op.popEnterAnim;
+ this.mManager.showFragment(f4, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ break;
+ case 5:
+ Fragment f5 = op.fragment;
+ f5.mNextAnim = op.popExitAnim;
+ this.mManager.hideFragment(f5, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ break;
+ case 6:
+ Fragment f6 = op.fragment;
+ f6.mNextAnim = op.popEnterAnim;
+ this.mManager.attachFragment(f6, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ break;
+ case 7:
+ Fragment f7 = op.fragment;
+ f7.mNextAnim = op.popEnterAnim;
+ this.mManager.detachFragment(f7, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
+ }
+ }
+ if (doStateMove) {
+ this.mManager.moveToState(this.mManager.mCurState, FragmentManagerImpl.reverseTransit(this.mTransition), this.mTransitionStyle, true);
+ }
+ if (this.mIndex >= 0) {
+ this.mManager.freeBackStackIndex(this.mIndex);
+ this.mIndex = -1;
+ }
+ }
+
+ @Override // android.support.v4.app.FragmentManager.BackStackEntry
+ public String getName() {
+ return this.mName;
+ }
+
+ public int getTransition() {
+ return this.mTransition;
+ }
+
+ public int getTransitionStyle() {
+ return this.mTransitionStyle;
+ }
+
+ @Override // android.support.v4.app.FragmentTransaction
+ public boolean isEmpty() {
+ return this.mNumOp == 0;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/BackStackState.java b/apk/sources/android/support/v4/app/BackStackState.java
new file mode 100644
index 0000000..bdbb6d6
--- /dev/null
+++ b/apk/sources/android/support/v4/app/BackStackState.java
@@ -0,0 +1,179 @@
+package android.support.v4.app;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v4.app.BackStackRecord;
+import android.text.TextUtils;
+import android.util.Log;
+import java.util.ArrayList;
+
+/* compiled from: BackStackRecord.java */
+/* loaded from: classes.dex */
+final class BackStackState implements Parcelable {
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.app.BackStackState.1
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public BackStackState createFromParcel(Parcel in) {
+ return new BackStackState(in);
+ }
+
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public BackStackState[] newArray(int size) {
+ return new BackStackState[size];
+ }
+ };
+ final int mBreadCrumbShortTitleRes;
+ final CharSequence mBreadCrumbShortTitleText;
+ final int mBreadCrumbTitleRes;
+ final CharSequence mBreadCrumbTitleText;
+ final int mIndex;
+ final String mName;
+ final int[] mOps;
+ final int mTransition;
+ final int mTransitionStyle;
+
+ public BackStackState(FragmentManagerImpl fm, BackStackRecord bse) {
+ int pos;
+ int numRemoved = 0;
+ for (BackStackRecord.Op op = bse.mHead; op != null; op = op.next) {
+ if (op.removed != null) {
+ numRemoved += op.removed.size();
+ }
+ }
+ this.mOps = new int[(bse.mNumOp * 7) + numRemoved];
+ if (!bse.mAddToBackStack) {
+ throw new IllegalStateException("Not on back stack");
+ }
+ BackStackRecord.Op op2 = bse.mHead;
+ int pos2 = 0;
+ while (op2 != null) {
+ int pos3 = pos2 + 1;
+ this.mOps[pos2] = op2.cmd;
+ int pos4 = pos3 + 1;
+ this.mOps[pos3] = op2.fragment != null ? op2.fragment.mIndex : -1;
+ int pos5 = pos4 + 1;
+ this.mOps[pos4] = op2.enterAnim;
+ int pos6 = pos5 + 1;
+ this.mOps[pos5] = op2.exitAnim;
+ int pos7 = pos6 + 1;
+ this.mOps[pos6] = op2.popEnterAnim;
+ int pos8 = pos7 + 1;
+ this.mOps[pos7] = op2.popExitAnim;
+ if (op2.removed != null) {
+ int N = op2.removed.size();
+ this.mOps[pos8] = N;
+ int i = 0;
+ int pos9 = pos8 + 1;
+ while (i < N) {
+ this.mOps[pos9] = op2.removed.get(i).mIndex;
+ i++;
+ pos9++;
+ }
+ pos = pos9;
+ } else {
+ pos = pos8 + 1;
+ this.mOps[pos8] = 0;
+ }
+ op2 = op2.next;
+ pos2 = pos;
+ }
+ this.mTransition = bse.mTransition;
+ this.mTransitionStyle = bse.mTransitionStyle;
+ this.mName = bse.mName;
+ this.mIndex = bse.mIndex;
+ this.mBreadCrumbTitleRes = bse.mBreadCrumbTitleRes;
+ this.mBreadCrumbTitleText = bse.mBreadCrumbTitleText;
+ this.mBreadCrumbShortTitleRes = bse.mBreadCrumbShortTitleRes;
+ this.mBreadCrumbShortTitleText = bse.mBreadCrumbShortTitleText;
+ }
+
+ public BackStackState(Parcel in) {
+ this.mOps = in.createIntArray();
+ this.mTransition = in.readInt();
+ this.mTransitionStyle = in.readInt();
+ this.mName = in.readString();
+ this.mIndex = in.readInt();
+ this.mBreadCrumbTitleRes = in.readInt();
+ this.mBreadCrumbTitleText = (CharSequence) TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
+ this.mBreadCrumbShortTitleRes = in.readInt();
+ this.mBreadCrumbShortTitleText = (CharSequence) TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
+ }
+
+ public BackStackRecord instantiate(FragmentManagerImpl fm) {
+ BackStackRecord bse = new BackStackRecord(fm);
+ int pos = 0;
+ int num = 0;
+ while (pos < this.mOps.length) {
+ BackStackRecord.Op op = new BackStackRecord.Op();
+ int pos2 = pos + 1;
+ op.cmd = this.mOps[pos];
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v("FragmentManager", "Instantiate " + bse + " op #" + num + " base fragment #" + this.mOps[pos2]);
+ }
+ int pos3 = pos2 + 1;
+ int findex = this.mOps[pos2];
+ if (findex >= 0) {
+ Fragment f = fm.mActive.get(findex);
+ op.fragment = f;
+ } else {
+ op.fragment = null;
+ }
+ int pos4 = pos3 + 1;
+ op.enterAnim = this.mOps[pos3];
+ int pos5 = pos4 + 1;
+ op.exitAnim = this.mOps[pos4];
+ int pos6 = pos5 + 1;
+ op.popEnterAnim = this.mOps[pos5];
+ int pos7 = pos6 + 1;
+ op.popExitAnim = this.mOps[pos6];
+ int pos8 = pos7 + 1;
+ int N = this.mOps[pos7];
+ if (N > 0) {
+ op.removed = new ArrayList<>(N);
+ int i = 0;
+ while (i < N) {
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v("FragmentManager", "Instantiate " + bse + " set remove fragment #" + this.mOps[pos8]);
+ }
+ Fragment r = fm.mActive.get(this.mOps[pos8]);
+ op.removed.add(r);
+ i++;
+ pos8++;
+ }
+ }
+ pos = pos8;
+ bse.addOp(op);
+ num++;
+ }
+ bse.mTransition = this.mTransition;
+ bse.mTransitionStyle = this.mTransitionStyle;
+ bse.mName = this.mName;
+ bse.mIndex = this.mIndex;
+ bse.mAddToBackStack = true;
+ bse.mBreadCrumbTitleRes = this.mBreadCrumbTitleRes;
+ bse.mBreadCrumbTitleText = this.mBreadCrumbTitleText;
+ bse.mBreadCrumbShortTitleRes = this.mBreadCrumbShortTitleRes;
+ bse.mBreadCrumbShortTitleText = this.mBreadCrumbShortTitleText;
+ bse.bumpBackStackNesting(1);
+ return bse;
+ }
+
+ @Override // android.os.Parcelable
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override // android.os.Parcelable
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeIntArray(this.mOps);
+ dest.writeInt(this.mTransition);
+ dest.writeInt(this.mTransitionStyle);
+ dest.writeString(this.mName);
+ dest.writeInt(this.mIndex);
+ dest.writeInt(this.mBreadCrumbTitleRes);
+ TextUtils.writeToParcel(this.mBreadCrumbTitleText, dest, 0);
+ dest.writeInt(this.mBreadCrumbShortTitleRes);
+ TextUtils.writeToParcel(this.mBreadCrumbShortTitleText, dest, 0);
+ }
+}
diff --git a/apk/sources/android/support/v4/app/DialogFragment.java b/apk/sources/android/support/v4/app/DialogFragment.java
new file mode 100644
index 0000000..03ec302
--- /dev/null
+++ b/apk/sources/android/support/v4/app/DialogFragment.java
@@ -0,0 +1,255 @@
+package android.support.v4.app;
+
+import android.R;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+/* loaded from: classes.dex */
+public class DialogFragment extends Fragment implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener {
+ private static final String SAVED_BACK_STACK_ID = "android:backStackId";
+ private static final String SAVED_CANCELABLE = "android:cancelable";
+ private static final String SAVED_DIALOG_STATE_TAG = "android:savedDialogState";
+ private static final String SAVED_SHOWS_DIALOG = "android:showsDialog";
+ private static final String SAVED_STYLE = "android:style";
+ private static final String SAVED_THEME = "android:theme";
+ public static final int STYLE_NORMAL = 0;
+ public static final int STYLE_NO_FRAME = 2;
+ public static final int STYLE_NO_INPUT = 3;
+ public static final int STYLE_NO_TITLE = 1;
+ Dialog mDialog;
+ boolean mDismissed;
+ boolean mShownByMe;
+ boolean mViewDestroyed;
+ int mStyle = 0;
+ int mTheme = 0;
+ boolean mCancelable = true;
+ boolean mShowsDialog = true;
+ int mBackStackId = -1;
+
+ public void setStyle(int style, int theme) {
+ this.mStyle = style;
+ if (this.mStyle == 2 || this.mStyle == 3) {
+ this.mTheme = R.style.Theme.Panel;
+ }
+ if (theme != 0) {
+ this.mTheme = theme;
+ }
+ }
+
+ public void show(FragmentManager manager, String tag) {
+ this.mDismissed = false;
+ this.mShownByMe = true;
+ FragmentTransaction ft = manager.beginTransaction();
+ ft.add(this, tag);
+ ft.commit();
+ }
+
+ public int show(FragmentTransaction transaction, String tag) {
+ this.mDismissed = false;
+ this.mShownByMe = true;
+ transaction.add(this, tag);
+ this.mViewDestroyed = false;
+ this.mBackStackId = transaction.commit();
+ return this.mBackStackId;
+ }
+
+ public void dismiss() {
+ dismissInternal(false);
+ }
+
+ public void dismissAllowingStateLoss() {
+ dismissInternal(true);
+ }
+
+ void dismissInternal(boolean allowStateLoss) {
+ if (!this.mDismissed) {
+ this.mDismissed = true;
+ this.mShownByMe = false;
+ if (this.mDialog != null) {
+ this.mDialog.dismiss();
+ this.mDialog = null;
+ }
+ this.mViewDestroyed = true;
+ if (this.mBackStackId >= 0) {
+ getFragmentManager().popBackStack(this.mBackStackId, 1);
+ this.mBackStackId = -1;
+ return;
+ }
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.remove(this);
+ if (allowStateLoss) {
+ ft.commitAllowingStateLoss();
+ } else {
+ ft.commit();
+ }
+ }
+ }
+
+ public Dialog getDialog() {
+ return this.mDialog;
+ }
+
+ public int getTheme() {
+ return this.mTheme;
+ }
+
+ public void setCancelable(boolean cancelable) {
+ this.mCancelable = cancelable;
+ if (this.mDialog != null) {
+ this.mDialog.setCancelable(cancelable);
+ }
+ }
+
+ public boolean isCancelable() {
+ return this.mCancelable;
+ }
+
+ public void setShowsDialog(boolean showsDialog) {
+ this.mShowsDialog = showsDialog;
+ }
+
+ public boolean getShowsDialog() {
+ return this.mShowsDialog;
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ if (!this.mShownByMe) {
+ this.mDismissed = false;
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onDetach() {
+ super.onDetach();
+ if (!this.mShownByMe && !this.mDismissed) {
+ this.mDismissed = true;
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ this.mShowsDialog = this.mContainerId == 0;
+ if (savedInstanceState != null) {
+ this.mStyle = savedInstanceState.getInt(SAVED_STYLE, 0);
+ this.mTheme = savedInstanceState.getInt(SAVED_THEME, 0);
+ this.mCancelable = savedInstanceState.getBoolean(SAVED_CANCELABLE, true);
+ this.mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, this.mShowsDialog);
+ this.mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1);
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
+ if (!this.mShowsDialog) {
+ return super.getLayoutInflater(savedInstanceState);
+ }
+ this.mDialog = onCreateDialog(savedInstanceState);
+ switch (this.mStyle) {
+ case 3:
+ this.mDialog.getWindow().addFlags(24);
+ case 1:
+ case 2:
+ this.mDialog.requestWindowFeature(1);
+ break;
+ }
+ if (this.mDialog != null) {
+ return (LayoutInflater) this.mDialog.getContext().getSystemService("layout_inflater");
+ }
+ return (LayoutInflater) this.mActivity.getSystemService("layout_inflater");
+ }
+
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new Dialog(getActivity(), getTheme());
+ }
+
+ @Override // android.content.DialogInterface.OnCancelListener
+ public void onCancel(DialogInterface dialog) {
+ }
+
+ @Override // android.content.DialogInterface.OnDismissListener
+ public void onDismiss(DialogInterface dialog) {
+ if (!this.mViewDestroyed) {
+ dismissInternal(true);
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onActivityCreated(Bundle savedInstanceState) {
+ Bundle dialogState;
+ super.onActivityCreated(savedInstanceState);
+ if (this.mShowsDialog) {
+ View view = getView();
+ if (view != null) {
+ if (view.getParent() != null) {
+ throw new IllegalStateException("DialogFragment can not be attached to a container view");
+ }
+ this.mDialog.setContentView(view);
+ }
+ this.mDialog.setOwnerActivity(getActivity());
+ this.mDialog.setCancelable(this.mCancelable);
+ this.mDialog.setOnCancelListener(this);
+ this.mDialog.setOnDismissListener(this);
+ if (savedInstanceState != null && (dialogState = savedInstanceState.getBundle(SAVED_DIALOG_STATE_TAG)) != null) {
+ this.mDialog.onRestoreInstanceState(dialogState);
+ }
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onStart() {
+ super.onStart();
+ if (this.mDialog != null) {
+ this.mViewDestroyed = false;
+ this.mDialog.show();
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onSaveInstanceState(Bundle outState) {
+ Bundle dialogState;
+ super.onSaveInstanceState(outState);
+ if (this.mDialog != null && (dialogState = this.mDialog.onSaveInstanceState()) != null) {
+ outState.putBundle(SAVED_DIALOG_STATE_TAG, dialogState);
+ }
+ if (this.mStyle != 0) {
+ outState.putInt(SAVED_STYLE, this.mStyle);
+ }
+ if (this.mTheme != 0) {
+ outState.putInt(SAVED_THEME, this.mTheme);
+ }
+ if (!this.mCancelable) {
+ outState.putBoolean(SAVED_CANCELABLE, this.mCancelable);
+ }
+ if (!this.mShowsDialog) {
+ outState.putBoolean(SAVED_SHOWS_DIALOG, this.mShowsDialog);
+ }
+ if (this.mBackStackId != -1) {
+ outState.putInt(SAVED_BACK_STACK_ID, this.mBackStackId);
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onStop() {
+ super.onStop();
+ if (this.mDialog != null) {
+ this.mDialog.hide();
+ }
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onDestroyView() {
+ super.onDestroyView();
+ if (this.mDialog != null) {
+ this.mViewDestroyed = true;
+ this.mDialog.dismiss();
+ this.mDialog = null;
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/Fragment.java b/apk/sources/android/support/v4/app/Fragment.java
new file mode 100644
index 0000000..bb51781
--- /dev/null
+++ b/apk/sources/android/support/v4/app/Fragment.java
@@ -0,0 +1,932 @@
+package android.support.v4.app;
+
+import android.app.Activity;
+import android.content.ComponentCallbacks;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v4.util.DebugUtils;
+import android.support.v4.util.SimpleArrayMap;
+import android.util.AttributeSet;
+import android.util.SparseArray;
+import android.view.ContextMenu;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/* loaded from: classes.dex */
+public class Fragment implements ComponentCallbacks, View.OnCreateContextMenuListener {
+ static final int ACTIVITY_CREATED = 2;
+ static final int CREATED = 1;
+ static final int INITIALIZING = 0;
+ static final int RESUMED = 5;
+ static final int STARTED = 4;
+ static final int STOPPED = 3;
+ private static final SimpleArrayMap> sClassMap = new SimpleArrayMap<>();
+ FragmentActivity mActivity;
+ boolean mAdded;
+ View mAnimatingAway;
+ Bundle mArguments;
+ int mBackStackNesting;
+ boolean mCalled;
+ boolean mCheckedForLoaderManager;
+ FragmentManagerImpl mChildFragmentManager;
+ ViewGroup mContainer;
+ int mContainerId;
+ boolean mDeferStart;
+ boolean mDetached;
+ int mFragmentId;
+ FragmentManagerImpl mFragmentManager;
+ boolean mFromLayout;
+ boolean mHasMenu;
+ boolean mHidden;
+ boolean mInLayout;
+ View mInnerView;
+ LoaderManagerImpl mLoaderManager;
+ boolean mLoadersStarted;
+ int mNextAnim;
+ Fragment mParentFragment;
+ boolean mRemoving;
+ boolean mRestored;
+ boolean mResumed;
+ boolean mRetainInstance;
+ boolean mRetaining;
+ Bundle mSavedFragmentState;
+ SparseArray mSavedViewState;
+ int mStateAfterAnimating;
+ String mTag;
+ Fragment mTarget;
+ int mTargetRequestCode;
+ View mView;
+ String mWho;
+ int mState = 0;
+ int mIndex = -1;
+ int mTargetIndex = -1;
+ boolean mMenuVisible = true;
+ boolean mUserVisibleHint = true;
+
+ public static class SavedState implements Parcelable {
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.app.Fragment.SavedState.1
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in, null);
+ }
+
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ final Bundle mState;
+
+ SavedState(Bundle state) {
+ this.mState = state;
+ }
+
+ SavedState(Parcel in, ClassLoader loader) {
+ this.mState = in.readBundle();
+ if (loader != null && this.mState != null) {
+ this.mState.setClassLoader(loader);
+ }
+ }
+
+ @Override // android.os.Parcelable
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override // android.os.Parcelable
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeBundle(this.mState);
+ }
+ }
+
+ public static class InstantiationException extends RuntimeException {
+ public InstantiationException(String msg, Exception cause) {
+ super(msg, cause);
+ }
+ }
+
+ public static Fragment instantiate(Context context, String fname) {
+ return instantiate(context, fname, null);
+ }
+
+ public static Fragment instantiate(Context context, String fname, Bundle args) throws ClassNotFoundException {
+ try {
+ Class> clazz = sClassMap.get(fname);
+ if (clazz == null) {
+ clazz = context.getClassLoader().loadClass(fname);
+ sClassMap.put(fname, clazz);
+ }
+ Fragment f = (Fragment) clazz.newInstance();
+ if (args != null) {
+ args.setClassLoader(f.getClass().getClassLoader());
+ f.mArguments = args;
+ }
+ return f;
+ } catch (ClassNotFoundException e) {
+ throw new InstantiationException("Unable to instantiate fragment " + fname + ": make sure class name exists, is public, and has an empty constructor that is public", e);
+ } catch (IllegalAccessException e2) {
+ throw new InstantiationException("Unable to instantiate fragment " + fname + ": make sure class name exists, is public, and has an empty constructor that is public", e2);
+ } catch (java.lang.InstantiationException e3) {
+ throw new InstantiationException("Unable to instantiate fragment " + fname + ": make sure class name exists, is public, and has an empty constructor that is public", e3);
+ }
+ }
+
+ static boolean isSupportFragmentClass(Context context, String fname) throws ClassNotFoundException {
+ try {
+ Class> clazz = sClassMap.get(fname);
+ if (clazz == null) {
+ clazz = context.getClassLoader().loadClass(fname);
+ sClassMap.put(fname, clazz);
+ }
+ return Fragment.class.isAssignableFrom(clazz);
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ }
+
+ final void restoreViewState(Bundle savedInstanceState) {
+ if (this.mSavedViewState != null) {
+ this.mInnerView.restoreHierarchyState(this.mSavedViewState);
+ this.mSavedViewState = null;
+ }
+ this.mCalled = false;
+ onViewStateRestored(savedInstanceState);
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onViewStateRestored()");
+ }
+ }
+
+ final void setIndex(int index, Fragment parent) {
+ this.mIndex = index;
+ if (parent != null) {
+ this.mWho = parent.mWho + ":" + this.mIndex;
+ } else {
+ this.mWho = "android:fragment:" + this.mIndex;
+ }
+ }
+
+ final boolean isInBackStack() {
+ return this.mBackStackNesting > 0;
+ }
+
+ public final boolean equals(Object o) {
+ return super.equals(o);
+ }
+
+ public final int hashCode() {
+ return super.hashCode();
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder(128);
+ DebugUtils.buildShortClassTag(this, sb);
+ if (this.mIndex >= 0) {
+ sb.append(" #");
+ sb.append(this.mIndex);
+ }
+ if (this.mFragmentId != 0) {
+ sb.append(" id=0x");
+ sb.append(Integer.toHexString(this.mFragmentId));
+ }
+ if (this.mTag != null) {
+ sb.append(" ");
+ sb.append(this.mTag);
+ }
+ sb.append('}');
+ return sb.toString();
+ }
+
+ public final int getId() {
+ return this.mFragmentId;
+ }
+
+ public final String getTag() {
+ return this.mTag;
+ }
+
+ public void setArguments(Bundle args) {
+ if (this.mIndex >= 0) {
+ throw new IllegalStateException("Fragment already active");
+ }
+ this.mArguments = args;
+ }
+
+ public final Bundle getArguments() {
+ return this.mArguments;
+ }
+
+ public void setInitialSavedState(SavedState state) {
+ if (this.mIndex >= 0) {
+ throw new IllegalStateException("Fragment already active");
+ }
+ this.mSavedFragmentState = (state == null || state.mState == null) ? null : state.mState;
+ }
+
+ public void setTargetFragment(Fragment fragment, int requestCode) {
+ this.mTarget = fragment;
+ this.mTargetRequestCode = requestCode;
+ }
+
+ public final Fragment getTargetFragment() {
+ return this.mTarget;
+ }
+
+ public final int getTargetRequestCode() {
+ return this.mTargetRequestCode;
+ }
+
+ public final FragmentActivity getActivity() {
+ return this.mActivity;
+ }
+
+ public final Resources getResources() {
+ if (this.mActivity == null) {
+ throw new IllegalStateException("Fragment " + this + " not attached to Activity");
+ }
+ return this.mActivity.getResources();
+ }
+
+ public final CharSequence getText(int resId) {
+ return getResources().getText(resId);
+ }
+
+ public final String getString(int resId) {
+ return getResources().getString(resId);
+ }
+
+ public final String getString(int resId, Object... formatArgs) {
+ return getResources().getString(resId, formatArgs);
+ }
+
+ public final FragmentManager getFragmentManager() {
+ return this.mFragmentManager;
+ }
+
+ public final FragmentManager getChildFragmentManager() {
+ if (this.mChildFragmentManager == null) {
+ instantiateChildFragmentManager();
+ if (this.mState >= 5) {
+ this.mChildFragmentManager.dispatchResume();
+ } else if (this.mState >= 4) {
+ this.mChildFragmentManager.dispatchStart();
+ } else if (this.mState >= 2) {
+ this.mChildFragmentManager.dispatchActivityCreated();
+ } else if (this.mState >= 1) {
+ this.mChildFragmentManager.dispatchCreate();
+ }
+ }
+ return this.mChildFragmentManager;
+ }
+
+ public final Fragment getParentFragment() {
+ return this.mParentFragment;
+ }
+
+ public final boolean isAdded() {
+ return this.mActivity != null && this.mAdded;
+ }
+
+ public final boolean isDetached() {
+ return this.mDetached;
+ }
+
+ public final boolean isRemoving() {
+ return this.mRemoving;
+ }
+
+ public final boolean isInLayout() {
+ return this.mInLayout;
+ }
+
+ public final boolean isResumed() {
+ return this.mResumed;
+ }
+
+ public final boolean isVisible() {
+ return (!isAdded() || isHidden() || this.mView == null || this.mView.getWindowToken() == null || this.mView.getVisibility() != 0) ? false : true;
+ }
+
+ public final boolean isHidden() {
+ return this.mHidden;
+ }
+
+ public final boolean hasOptionsMenu() {
+ return this.mHasMenu;
+ }
+
+ public final boolean isMenuVisible() {
+ return this.mMenuVisible;
+ }
+
+ public void onHiddenChanged(boolean hidden) {
+ }
+
+ public void setRetainInstance(boolean retain) {
+ if (retain && this.mParentFragment != null) {
+ throw new IllegalStateException("Can't retain fragements that are nested in other fragments");
+ }
+ this.mRetainInstance = retain;
+ }
+
+ public final boolean getRetainInstance() {
+ return this.mRetainInstance;
+ }
+
+ public void setHasOptionsMenu(boolean hasMenu) {
+ if (this.mHasMenu != hasMenu) {
+ this.mHasMenu = hasMenu;
+ if (isAdded() && !isHidden()) {
+ this.mActivity.supportInvalidateOptionsMenu();
+ }
+ }
+ }
+
+ public void setMenuVisibility(boolean menuVisible) {
+ if (this.mMenuVisible != menuVisible) {
+ this.mMenuVisible = menuVisible;
+ if (this.mHasMenu && isAdded() && !isHidden()) {
+ this.mActivity.supportInvalidateOptionsMenu();
+ }
+ }
+ }
+
+ public void setUserVisibleHint(boolean isVisibleToUser) throws Resources.NotFoundException {
+ if (!this.mUserVisibleHint && isVisibleToUser && this.mState < 4) {
+ this.mFragmentManager.performPendingDeferredStart(this);
+ }
+ this.mUserVisibleHint = isVisibleToUser;
+ this.mDeferStart = !isVisibleToUser;
+ }
+
+ public boolean getUserVisibleHint() {
+ return this.mUserVisibleHint;
+ }
+
+ public LoaderManager getLoaderManager() {
+ if (this.mLoaderManager != null) {
+ return this.mLoaderManager;
+ }
+ if (this.mActivity == null) {
+ throw new IllegalStateException("Fragment " + this + " not attached to Activity");
+ }
+ this.mCheckedForLoaderManager = true;
+ this.mLoaderManager = this.mActivity.getLoaderManager(this.mWho, this.mLoadersStarted, true);
+ return this.mLoaderManager;
+ }
+
+ public void startActivity(Intent intent) {
+ if (this.mActivity == null) {
+ throw new IllegalStateException("Fragment " + this + " not attached to Activity");
+ }
+ this.mActivity.startActivityFromFragment(this, intent, -1);
+ }
+
+ public void startActivityForResult(Intent intent, int requestCode) {
+ if (this.mActivity == null) {
+ throw new IllegalStateException("Fragment " + this + " not attached to Activity");
+ }
+ this.mActivity.startActivityFromFragment(this, intent, requestCode);
+ }
+
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ }
+
+ public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
+ return this.mActivity.getLayoutInflater();
+ }
+
+ public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
+ this.mCalled = true;
+ }
+
+ public void onAttach(Activity activity) {
+ this.mCalled = true;
+ }
+
+ public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
+ return null;
+ }
+
+ public void onCreate(Bundle savedInstanceState) {
+ this.mCalled = true;
+ }
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ return null;
+ }
+
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ }
+
+ public View getView() {
+ return this.mView;
+ }
+
+ public void onActivityCreated(Bundle savedInstanceState) {
+ this.mCalled = true;
+ }
+
+ public void onViewStateRestored(Bundle savedInstanceState) {
+ this.mCalled = true;
+ }
+
+ public void onStart() {
+ this.mCalled = true;
+ if (!this.mLoadersStarted) {
+ this.mLoadersStarted = true;
+ if (!this.mCheckedForLoaderManager) {
+ this.mCheckedForLoaderManager = true;
+ this.mLoaderManager = this.mActivity.getLoaderManager(this.mWho, this.mLoadersStarted, false);
+ }
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doStart();
+ }
+ }
+ }
+
+ public void onResume() {
+ this.mCalled = true;
+ }
+
+ public void onSaveInstanceState(Bundle outState) {
+ }
+
+ @Override // android.content.ComponentCallbacks
+ public void onConfigurationChanged(Configuration newConfig) {
+ this.mCalled = true;
+ }
+
+ public void onPause() {
+ this.mCalled = true;
+ }
+
+ public void onStop() {
+ this.mCalled = true;
+ }
+
+ @Override // android.content.ComponentCallbacks
+ public void onLowMemory() {
+ this.mCalled = true;
+ }
+
+ public void onDestroyView() {
+ this.mCalled = true;
+ }
+
+ public void onDestroy() {
+ this.mCalled = true;
+ if (!this.mCheckedForLoaderManager) {
+ this.mCheckedForLoaderManager = true;
+ this.mLoaderManager = this.mActivity.getLoaderManager(this.mWho, this.mLoadersStarted, false);
+ }
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doDestroy();
+ }
+ }
+
+ void initState() {
+ this.mIndex = -1;
+ this.mWho = null;
+ this.mAdded = false;
+ this.mRemoving = false;
+ this.mResumed = false;
+ this.mFromLayout = false;
+ this.mInLayout = false;
+ this.mRestored = false;
+ this.mBackStackNesting = 0;
+ this.mFragmentManager = null;
+ this.mActivity = null;
+ this.mFragmentId = 0;
+ this.mContainerId = 0;
+ this.mTag = null;
+ this.mHidden = false;
+ this.mDetached = false;
+ this.mRetaining = false;
+ this.mLoaderManager = null;
+ this.mLoadersStarted = false;
+ this.mCheckedForLoaderManager = false;
+ }
+
+ public void onDetach() {
+ this.mCalled = true;
+ }
+
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ }
+
+ public void onPrepareOptionsMenu(Menu menu) {
+ }
+
+ public void onDestroyOptionsMenu() {
+ }
+
+ public boolean onOptionsItemSelected(MenuItem item) {
+ return false;
+ }
+
+ public void onOptionsMenuClosed(Menu menu) {
+ }
+
+ @Override // android.view.View.OnCreateContextMenuListener
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ getActivity().onCreateContextMenu(menu, v, menuInfo);
+ }
+
+ public void registerForContextMenu(View view) {
+ view.setOnCreateContextMenuListener(this);
+ }
+
+ public void unregisterForContextMenu(View view) {
+ view.setOnCreateContextMenuListener(null);
+ }
+
+ public boolean onContextItemSelected(MenuItem item) {
+ return false;
+ }
+
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ writer.print(prefix);
+ writer.print("mFragmentId=#");
+ writer.print(Integer.toHexString(this.mFragmentId));
+ writer.print(" mContainerId=#");
+ writer.print(Integer.toHexString(this.mContainerId));
+ writer.print(" mTag=");
+ writer.println(this.mTag);
+ writer.print(prefix);
+ writer.print("mState=");
+ writer.print(this.mState);
+ writer.print(" mIndex=");
+ writer.print(this.mIndex);
+ writer.print(" mWho=");
+ writer.print(this.mWho);
+ writer.print(" mBackStackNesting=");
+ writer.println(this.mBackStackNesting);
+ writer.print(prefix);
+ writer.print("mAdded=");
+ writer.print(this.mAdded);
+ writer.print(" mRemoving=");
+ writer.print(this.mRemoving);
+ writer.print(" mResumed=");
+ writer.print(this.mResumed);
+ writer.print(" mFromLayout=");
+ writer.print(this.mFromLayout);
+ writer.print(" mInLayout=");
+ writer.println(this.mInLayout);
+ writer.print(prefix);
+ writer.print("mHidden=");
+ writer.print(this.mHidden);
+ writer.print(" mDetached=");
+ writer.print(this.mDetached);
+ writer.print(" mMenuVisible=");
+ writer.print(this.mMenuVisible);
+ writer.print(" mHasMenu=");
+ writer.println(this.mHasMenu);
+ writer.print(prefix);
+ writer.print("mRetainInstance=");
+ writer.print(this.mRetainInstance);
+ writer.print(" mRetaining=");
+ writer.print(this.mRetaining);
+ writer.print(" mUserVisibleHint=");
+ writer.println(this.mUserVisibleHint);
+ if (this.mFragmentManager != null) {
+ writer.print(prefix);
+ writer.print("mFragmentManager=");
+ writer.println(this.mFragmentManager);
+ }
+ if (this.mActivity != null) {
+ writer.print(prefix);
+ writer.print("mActivity=");
+ writer.println(this.mActivity);
+ }
+ if (this.mParentFragment != null) {
+ writer.print(prefix);
+ writer.print("mParentFragment=");
+ writer.println(this.mParentFragment);
+ }
+ if (this.mArguments != null) {
+ writer.print(prefix);
+ writer.print("mArguments=");
+ writer.println(this.mArguments);
+ }
+ if (this.mSavedFragmentState != null) {
+ writer.print(prefix);
+ writer.print("mSavedFragmentState=");
+ writer.println(this.mSavedFragmentState);
+ }
+ if (this.mSavedViewState != null) {
+ writer.print(prefix);
+ writer.print("mSavedViewState=");
+ writer.println(this.mSavedViewState);
+ }
+ if (this.mTarget != null) {
+ writer.print(prefix);
+ writer.print("mTarget=");
+ writer.print(this.mTarget);
+ writer.print(" mTargetRequestCode=");
+ writer.println(this.mTargetRequestCode);
+ }
+ if (this.mNextAnim != 0) {
+ writer.print(prefix);
+ writer.print("mNextAnim=");
+ writer.println(this.mNextAnim);
+ }
+ if (this.mContainer != null) {
+ writer.print(prefix);
+ writer.print("mContainer=");
+ writer.println(this.mContainer);
+ }
+ if (this.mView != null) {
+ writer.print(prefix);
+ writer.print("mView=");
+ writer.println(this.mView);
+ }
+ if (this.mInnerView != null) {
+ writer.print(prefix);
+ writer.print("mInnerView=");
+ writer.println(this.mView);
+ }
+ if (this.mAnimatingAway != null) {
+ writer.print(prefix);
+ writer.print("mAnimatingAway=");
+ writer.println(this.mAnimatingAway);
+ writer.print(prefix);
+ writer.print("mStateAfterAnimating=");
+ writer.println(this.mStateAfterAnimating);
+ }
+ if (this.mLoaderManager != null) {
+ writer.print(prefix);
+ writer.println("Loader Manager:");
+ this.mLoaderManager.dump(prefix + " ", fd, writer, args);
+ }
+ if (this.mChildFragmentManager != null) {
+ writer.print(prefix);
+ writer.println("Child " + this.mChildFragmentManager + ":");
+ this.mChildFragmentManager.dump(prefix + " ", fd, writer, args);
+ }
+ }
+
+ Fragment findFragmentByWho(String who) {
+ if (!who.equals(this.mWho)) {
+ if (this.mChildFragmentManager != null) {
+ return this.mChildFragmentManager.findFragmentByWho(who);
+ }
+ return null;
+ }
+ return this;
+ }
+
+ void instantiateChildFragmentManager() {
+ this.mChildFragmentManager = new FragmentManagerImpl();
+ this.mChildFragmentManager.attachActivity(this.mActivity, new FragmentContainer() { // from class: android.support.v4.app.Fragment.1
+ @Override // android.support.v4.app.FragmentContainer
+ public View findViewById(int id) {
+ if (Fragment.this.mView == null) {
+ throw new IllegalStateException("Fragment does not have a view");
+ }
+ return Fragment.this.mView.findViewById(id);
+ }
+ }, this);
+ }
+
+ void performCreate(Bundle savedInstanceState) {
+ Parcelable p;
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.noteStateNotSaved();
+ }
+ this.mCalled = false;
+ onCreate(savedInstanceState);
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onCreate()");
+ }
+ if (savedInstanceState != null && (p = savedInstanceState.getParcelable("android:support:fragments")) != null) {
+ if (this.mChildFragmentManager == null) {
+ instantiateChildFragmentManager();
+ }
+ this.mChildFragmentManager.restoreAllState(p, null);
+ this.mChildFragmentManager.dispatchCreate();
+ }
+ }
+
+ View performCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.noteStateNotSaved();
+ }
+ return onCreateView(inflater, container, savedInstanceState);
+ }
+
+ void performActivityCreated(Bundle savedInstanceState) {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.noteStateNotSaved();
+ }
+ this.mCalled = false;
+ onActivityCreated(savedInstanceState);
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onActivityCreated()");
+ }
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchActivityCreated();
+ }
+ }
+
+ void performStart() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.noteStateNotSaved();
+ this.mChildFragmentManager.execPendingActions();
+ }
+ this.mCalled = false;
+ onStart();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onStart()");
+ }
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchStart();
+ }
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doReportStart();
+ }
+ }
+
+ void performResume() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.noteStateNotSaved();
+ this.mChildFragmentManager.execPendingActions();
+ }
+ this.mCalled = false;
+ onResume();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onResume()");
+ }
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchResume();
+ this.mChildFragmentManager.execPendingActions();
+ }
+ }
+
+ void performConfigurationChanged(Configuration newConfig) {
+ onConfigurationChanged(newConfig);
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchConfigurationChanged(newConfig);
+ }
+ }
+
+ void performLowMemory() {
+ onLowMemory();
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchLowMemory();
+ }
+ }
+
+ boolean performCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ boolean show = false;
+ if (this.mHidden) {
+ return false;
+ }
+ if (this.mHasMenu && this.mMenuVisible) {
+ show = true;
+ onCreateOptionsMenu(menu, inflater);
+ }
+ if (this.mChildFragmentManager != null) {
+ return show | this.mChildFragmentManager.dispatchCreateOptionsMenu(menu, inflater);
+ }
+ return show;
+ }
+
+ boolean performPrepareOptionsMenu(Menu menu) {
+ boolean show = false;
+ if (this.mHidden) {
+ return false;
+ }
+ if (this.mHasMenu && this.mMenuVisible) {
+ show = true;
+ onPrepareOptionsMenu(menu);
+ }
+ if (this.mChildFragmentManager != null) {
+ return show | this.mChildFragmentManager.dispatchPrepareOptionsMenu(menu);
+ }
+ return show;
+ }
+
+ boolean performOptionsItemSelected(MenuItem item) {
+ if (!this.mHidden) {
+ if (this.mHasMenu && this.mMenuVisible && onOptionsItemSelected(item)) {
+ return true;
+ }
+ if (this.mChildFragmentManager != null && this.mChildFragmentManager.dispatchOptionsItemSelected(item)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ boolean performContextItemSelected(MenuItem item) {
+ if (!this.mHidden) {
+ if (onContextItemSelected(item)) {
+ return true;
+ }
+ if (this.mChildFragmentManager != null && this.mChildFragmentManager.dispatchContextItemSelected(item)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void performOptionsMenuClosed(Menu menu) {
+ if (!this.mHidden) {
+ if (this.mHasMenu && this.mMenuVisible) {
+ onOptionsMenuClosed(menu);
+ }
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchOptionsMenuClosed(menu);
+ }
+ }
+ }
+
+ void performSaveInstanceState(Bundle outState) {
+ Parcelable p;
+ onSaveInstanceState(outState);
+ if (this.mChildFragmentManager != null && (p = this.mChildFragmentManager.saveAllState()) != null) {
+ outState.putParcelable("android:support:fragments", p);
+ }
+ }
+
+ void performPause() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchPause();
+ }
+ this.mCalled = false;
+ onPause();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onPause()");
+ }
+ }
+
+ void performStop() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchStop();
+ }
+ this.mCalled = false;
+ onStop();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onStop()");
+ }
+ }
+
+ void performReallyStop() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchReallyStop();
+ }
+ if (this.mLoadersStarted) {
+ this.mLoadersStarted = false;
+ if (!this.mCheckedForLoaderManager) {
+ this.mCheckedForLoaderManager = true;
+ this.mLoaderManager = this.mActivity.getLoaderManager(this.mWho, this.mLoadersStarted, false);
+ }
+ if (this.mLoaderManager != null) {
+ if (!this.mActivity.mRetaining) {
+ this.mLoaderManager.doStop();
+ } else {
+ this.mLoaderManager.doRetain();
+ }
+ }
+ }
+ }
+
+ void performDestroyView() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchDestroyView();
+ }
+ this.mCalled = false;
+ onDestroyView();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onDestroyView()");
+ }
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doReportNextStart();
+ }
+ }
+
+ void performDestroy() {
+ if (this.mChildFragmentManager != null) {
+ this.mChildFragmentManager.dispatchDestroy();
+ }
+ this.mCalled = false;
+ onDestroy();
+ if (!this.mCalled) {
+ throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onDestroy()");
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentActivity.java b/apk/sources/android/support/v4/app/FragmentActivity.java
new file mode 100644
index 0000000..cc34c06
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentActivity.java
@@ -0,0 +1,667 @@
+package android.support.v4.app;
+
+import android.R;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.support.v4.util.SimpleArrayMap;
+import android.support.v4.view.ViewCompat;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+/* loaded from: classes.dex */
+public class FragmentActivity extends Activity {
+ static final String FRAGMENTS_TAG = "android:support:fragments";
+ private static final int HONEYCOMB = 11;
+ static final int MSG_REALLY_STOPPED = 1;
+ static final int MSG_RESUME_PENDING = 2;
+ private static final String TAG = "FragmentActivity";
+ SimpleArrayMap mAllLoaderManagers;
+ boolean mCheckedForLoaderManager;
+ boolean mCreated;
+ LoaderManagerImpl mLoaderManager;
+ boolean mLoadersStarted;
+ boolean mOptionsMenuInvalidated;
+ boolean mReallyStopped;
+ boolean mResumed;
+ boolean mRetaining;
+ boolean mStopped;
+ final Handler mHandler = new Handler() { // from class: android.support.v4.app.FragmentActivity.1
+ @Override // android.os.Handler
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case 1:
+ if (FragmentActivity.this.mStopped) {
+ FragmentActivity.this.doReallyStop(false);
+ break;
+ }
+ break;
+ case 2:
+ FragmentActivity.this.onResumeFragments();
+ FragmentActivity.this.mFragments.execPendingActions();
+ break;
+ default:
+ super.handleMessage(msg);
+ break;
+ }
+ }
+ };
+ final FragmentManagerImpl mFragments = new FragmentManagerImpl();
+ final FragmentContainer mContainer = new FragmentContainer() { // from class: android.support.v4.app.FragmentActivity.2
+ @Override // android.support.v4.app.FragmentContainer
+ public View findViewById(int id) {
+ return FragmentActivity.this.findViewById(id);
+ }
+ };
+
+ static final class NonConfigurationInstances {
+ Object activity;
+ SimpleArrayMap children;
+ Object custom;
+ ArrayList fragments;
+ SimpleArrayMap loaders;
+
+ NonConfigurationInstances() {
+ }
+ }
+
+ static class FragmentTag {
+ public static final int[] Fragment = {R.attr.name, R.attr.id, R.attr.tag};
+ public static final int Fragment_id = 1;
+ public static final int Fragment_name = 0;
+ public static final int Fragment_tag = 2;
+
+ FragmentTag() {
+ }
+ }
+
+ @Override // android.app.Activity
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ this.mFragments.noteStateNotSaved();
+ int index = requestCode >> 16;
+ if (index != 0) {
+ int index2 = index - 1;
+ if (this.mFragments.mActive == null || index2 < 0 || index2 >= this.mFragments.mActive.size()) {
+ Log.w(TAG, "Activity result fragment index out of range: 0x" + Integer.toHexString(requestCode));
+ return;
+ }
+ Fragment frag = this.mFragments.mActive.get(index2);
+ if (frag == null) {
+ Log.w(TAG, "Activity result no fragment exists for index: 0x" + Integer.toHexString(requestCode));
+ return;
+ } else {
+ frag.onActivityResult(65535 & requestCode, resultCode, data);
+ return;
+ }
+ }
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+
+ @Override // android.app.Activity
+ public void onBackPressed() {
+ if (!this.mFragments.popBackStackImmediate()) {
+ finish();
+ }
+ }
+
+ @Override // android.app.Activity, android.content.ComponentCallbacks
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ this.mFragments.dispatchConfigurationChanged(newConfig);
+ }
+
+ @Override // android.app.Activity
+ protected void onCreate(Bundle savedInstanceState) {
+ this.mFragments.attachActivity(this, this.mContainer, null);
+ if (getLayoutInflater().getFactory() == null) {
+ getLayoutInflater().setFactory(this);
+ }
+ super.onCreate(savedInstanceState);
+ NonConfigurationInstances nc = (NonConfigurationInstances) getLastNonConfigurationInstance();
+ if (nc != null) {
+ this.mAllLoaderManagers = nc.loaders;
+ }
+ if (savedInstanceState != null) {
+ Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
+ this.mFragments.restoreAllState(p, nc != null ? nc.fragments : null);
+ }
+ this.mFragments.dispatchCreate();
+ }
+
+ @Override // android.app.Activity, android.view.Window.Callback
+ public boolean onCreatePanelMenu(int featureId, Menu menu) {
+ if (featureId == 0) {
+ boolean show = super.onCreatePanelMenu(featureId, menu);
+ boolean show2 = show | this.mFragments.dispatchCreateOptionsMenu(menu, getMenuInflater());
+ if (Build.VERSION.SDK_INT < HONEYCOMB) {
+ return true;
+ }
+ return show2;
+ }
+ boolean show3 = super.onCreatePanelMenu(featureId, menu);
+ return show3;
+ }
+
+ @Override // android.app.Activity, android.view.LayoutInflater.Factory
+ public View onCreateView(String name, Context context, AttributeSet attrs) {
+ if (!"fragment".equals(name)) {
+ return super.onCreateView(name, context, attrs);
+ }
+ String fname = attrs.getAttributeValue(null, "class");
+ TypedArray a = context.obtainStyledAttributes(attrs, FragmentTag.Fragment);
+ if (fname == null) {
+ fname = a.getString(0);
+ }
+ int id = a.getResourceId(1, -1);
+ String tag = a.getString(2);
+ a.recycle();
+ if (!Fragment.isSupportFragmentClass(this, fname)) {
+ return super.onCreateView(name, context, attrs);
+ }
+ View parent = null;
+ int containerId = 0 != 0 ? parent.getId() : 0;
+ if (containerId == -1 && id == -1 && tag == null) {
+ throw new IllegalArgumentException(attrs.getPositionDescription() + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname);
+ }
+ Fragment fragment = id != -1 ? this.mFragments.findFragmentById(id) : null;
+ if (fragment == null && tag != null) {
+ fragment = this.mFragments.findFragmentByTag(tag);
+ }
+ if (fragment == null && containerId != -1) {
+ fragment = this.mFragments.findFragmentById(containerId);
+ }
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v(TAG, "onCreateView: id=0x" + Integer.toHexString(id) + " fname=" + fname + " existing=" + fragment);
+ }
+ if (fragment == null) {
+ fragment = Fragment.instantiate(this, fname);
+ fragment.mFromLayout = true;
+ fragment.mFragmentId = id != 0 ? id : containerId;
+ fragment.mContainerId = containerId;
+ fragment.mTag = tag;
+ fragment.mInLayout = true;
+ fragment.mFragmentManager = this.mFragments;
+ fragment.onInflate(this, attrs, fragment.mSavedFragmentState);
+ this.mFragments.addFragment(fragment, true);
+ } else {
+ if (fragment.mInLayout) {
+ throw new IllegalArgumentException(attrs.getPositionDescription() + ": Duplicate id 0x" + Integer.toHexString(id) + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) + " with another fragment for " + fname);
+ }
+ fragment.mInLayout = true;
+ if (!fragment.mRetaining) {
+ fragment.onInflate(this, attrs, fragment.mSavedFragmentState);
+ }
+ this.mFragments.moveToState(fragment);
+ }
+ if (fragment.mView == null) {
+ throw new IllegalStateException("Fragment " + fname + " did not create a view.");
+ }
+ if (id != 0) {
+ fragment.mView.setId(id);
+ }
+ if (fragment.mView.getTag() == null) {
+ fragment.mView.setTag(tag);
+ }
+ return fragment.mView;
+ }
+
+ @Override // android.app.Activity
+ protected void onDestroy() {
+ super.onDestroy();
+ doReallyStop(false);
+ this.mFragments.dispatchDestroy();
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doDestroy();
+ }
+ }
+
+ @Override // android.app.Activity, android.view.KeyEvent.Callback
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (Build.VERSION.SDK_INT >= 5 || keyCode != 4 || event.getRepeatCount() != 0) {
+ return super.onKeyDown(keyCode, event);
+ }
+ onBackPressed();
+ return true;
+ }
+
+ @Override // android.app.Activity, android.content.ComponentCallbacks
+ public void onLowMemory() {
+ super.onLowMemory();
+ this.mFragments.dispatchLowMemory();
+ }
+
+ @Override // android.app.Activity, android.view.Window.Callback
+ public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ if (super.onMenuItemSelected(featureId, item)) {
+ return true;
+ }
+ switch (featureId) {
+ case 0:
+ return this.mFragments.dispatchOptionsItemSelected(item);
+ case 6:
+ return this.mFragments.dispatchContextItemSelected(item);
+ default:
+ return false;
+ }
+ }
+
+ @Override // android.app.Activity, android.view.Window.Callback
+ public void onPanelClosed(int featureId, Menu menu) {
+ switch (featureId) {
+ case 0:
+ this.mFragments.dispatchOptionsMenuClosed(menu);
+ break;
+ }
+ super.onPanelClosed(featureId, menu);
+ }
+
+ @Override // android.app.Activity
+ protected void onPause() {
+ super.onPause();
+ this.mResumed = false;
+ if (this.mHandler.hasMessages(2)) {
+ this.mHandler.removeMessages(2);
+ onResumeFragments();
+ }
+ this.mFragments.dispatchPause();
+ }
+
+ @Override // android.app.Activity
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ this.mFragments.noteStateNotSaved();
+ }
+
+ @Override // android.app.Activity
+ protected void onResume() {
+ super.onResume();
+ this.mHandler.sendEmptyMessage(2);
+ this.mResumed = true;
+ this.mFragments.execPendingActions();
+ }
+
+ @Override // android.app.Activity
+ protected void onPostResume() {
+ super.onPostResume();
+ this.mHandler.removeMessages(2);
+ onResumeFragments();
+ this.mFragments.execPendingActions();
+ }
+
+ protected void onResumeFragments() {
+ this.mFragments.dispatchResume();
+ }
+
+ @Override // android.app.Activity, android.view.Window.Callback
+ public boolean onPreparePanel(int featureId, View view, Menu menu) {
+ if (featureId == 0 && menu != null) {
+ if (this.mOptionsMenuInvalidated) {
+ this.mOptionsMenuInvalidated = false;
+ menu.clear();
+ onCreatePanelMenu(featureId, menu);
+ }
+ boolean goforit = onPrepareOptionsPanel(view, menu);
+ return goforit | this.mFragments.dispatchPrepareOptionsMenu(menu);
+ }
+ boolean goforit2 = super.onPreparePanel(featureId, view, menu);
+ return goforit2;
+ }
+
+ protected boolean onPrepareOptionsPanel(View view, Menu menu) {
+ return super.onPreparePanel(0, view, menu);
+ }
+
+ @Override // android.app.Activity
+ public final Object onRetainNonConfigurationInstance() {
+ if (this.mStopped) {
+ doReallyStop(true);
+ }
+ Object custom = onRetainCustomNonConfigurationInstance();
+ ArrayList fragments = this.mFragments.retainNonConfig();
+ boolean retainLoaders = false;
+ if (this.mAllLoaderManagers != null) {
+ int N = this.mAllLoaderManagers.size();
+ LoaderManagerImpl[] loaders = new LoaderManagerImpl[N];
+ for (int i = N - 1; i >= 0; i--) {
+ loaders[i] = this.mAllLoaderManagers.valueAt(i);
+ }
+ for (int i2 = 0; i2 < N; i2++) {
+ LoaderManagerImpl lm = loaders[i2];
+ if (lm.mRetaining) {
+ retainLoaders = true;
+ } else {
+ lm.doDestroy();
+ this.mAllLoaderManagers.remove(lm.mWho);
+ }
+ }
+ }
+ if (fragments == null && !retainLoaders && custom == null) {
+ return null;
+ }
+ NonConfigurationInstances nci = new NonConfigurationInstances();
+ nci.activity = null;
+ nci.custom = custom;
+ nci.children = null;
+ nci.fragments = fragments;
+ nci.loaders = this.mAllLoaderManagers;
+ return nci;
+ }
+
+ @Override // android.app.Activity
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ Parcelable p = this.mFragments.saveAllState();
+ if (p != null) {
+ outState.putParcelable(FRAGMENTS_TAG, p);
+ }
+ }
+
+ @Override // android.app.Activity
+ protected void onStart() {
+ super.onStart();
+ this.mStopped = false;
+ this.mReallyStopped = false;
+ this.mHandler.removeMessages(1);
+ if (!this.mCreated) {
+ this.mCreated = true;
+ this.mFragments.dispatchActivityCreated();
+ }
+ this.mFragments.noteStateNotSaved();
+ this.mFragments.execPendingActions();
+ if (!this.mLoadersStarted) {
+ this.mLoadersStarted = true;
+ if (this.mLoaderManager != null) {
+ this.mLoaderManager.doStart();
+ } else if (!this.mCheckedForLoaderManager) {
+ this.mLoaderManager = getLoaderManager("(root)", this.mLoadersStarted, false);
+ if (this.mLoaderManager != null && !this.mLoaderManager.mStarted) {
+ this.mLoaderManager.doStart();
+ }
+ }
+ this.mCheckedForLoaderManager = true;
+ }
+ this.mFragments.dispatchStart();
+ if (this.mAllLoaderManagers != null) {
+ int N = this.mAllLoaderManagers.size();
+ LoaderManagerImpl[] loaders = new LoaderManagerImpl[N];
+ for (int i = N - 1; i >= 0; i--) {
+ loaders[i] = this.mAllLoaderManagers.valueAt(i);
+ }
+ for (int i2 = 0; i2 < N; i2++) {
+ LoaderManagerImpl lm = loaders[i2];
+ lm.finishRetain();
+ lm.doReportStart();
+ }
+ }
+ }
+
+ @Override // android.app.Activity
+ protected void onStop() {
+ super.onStop();
+ this.mStopped = true;
+ this.mHandler.sendEmptyMessage(1);
+ this.mFragments.dispatchStop();
+ }
+
+ public Object onRetainCustomNonConfigurationInstance() {
+ return null;
+ }
+
+ public Object getLastCustomNonConfigurationInstance() {
+ NonConfigurationInstances nc = (NonConfigurationInstances) getLastNonConfigurationInstance();
+ if (nc != null) {
+ return nc.custom;
+ }
+ return null;
+ }
+
+ public void supportInvalidateOptionsMenu() {
+ if (Build.VERSION.SDK_INT >= HONEYCOMB) {
+ ActivityCompatHoneycomb.invalidateOptionsMenu(this);
+ } else {
+ this.mOptionsMenuInvalidated = true;
+ }
+ }
+
+ @Override // android.app.Activity
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ if (Build.VERSION.SDK_INT >= HONEYCOMB) {
+ }
+ writer.print(prefix);
+ writer.print("Local FragmentActivity ");
+ writer.print(Integer.toHexString(System.identityHashCode(this)));
+ writer.println(" State:");
+ String innerPrefix = prefix + " ";
+ writer.print(innerPrefix);
+ writer.print("mCreated=");
+ writer.print(this.mCreated);
+ writer.print("mResumed=");
+ writer.print(this.mResumed);
+ writer.print(" mStopped=");
+ writer.print(this.mStopped);
+ writer.print(" mReallyStopped=");
+ writer.println(this.mReallyStopped);
+ writer.print(innerPrefix);
+ writer.print("mLoadersStarted=");
+ writer.println(this.mLoadersStarted);
+ if (this.mLoaderManager != null) {
+ writer.print(prefix);
+ writer.print("Loader Manager ");
+ writer.print(Integer.toHexString(System.identityHashCode(this.mLoaderManager)));
+ writer.println(":");
+ this.mLoaderManager.dump(prefix + " ", fd, writer, args);
+ }
+ this.mFragments.dump(prefix, fd, writer, args);
+ writer.print(prefix);
+ writer.println("View Hierarchy:");
+ dumpViewHierarchy(prefix + " ", writer, getWindow().getDecorView());
+ }
+
+ /* JADX WARN: Failed to find 'out' block for switch in B:40:0x00ed. Please report as an issue. */
+ private static String viewToString(View view) throws Resources.NotFoundException {
+ String pkgname;
+ StringBuilder out = new StringBuilder(128);
+ out.append(view.getClass().getName());
+ out.append('{');
+ out.append(Integer.toHexString(System.identityHashCode(view)));
+ out.append(' ');
+ switch (view.getVisibility()) {
+ case 0:
+ out.append('V');
+ break;
+ case 4:
+ out.append('I');
+ break;
+ case 8:
+ out.append('G');
+ break;
+ default:
+ out.append('.');
+ break;
+ }
+ out.append(view.isFocusable() ? 'F' : '.');
+ out.append(view.isEnabled() ? 'E' : '.');
+ out.append(view.willNotDraw() ? '.' : 'D');
+ out.append(view.isHorizontalScrollBarEnabled() ? 'H' : '.');
+ out.append(view.isVerticalScrollBarEnabled() ? 'V' : '.');
+ out.append(view.isClickable() ? 'C' : '.');
+ out.append(view.isLongClickable() ? 'L' : '.');
+ out.append(' ');
+ out.append(view.isFocused() ? 'F' : '.');
+ out.append(view.isSelected() ? 'S' : '.');
+ out.append(view.isPressed() ? 'P' : '.');
+ out.append(' ');
+ out.append(view.getLeft());
+ out.append(',');
+ out.append(view.getTop());
+ out.append('-');
+ out.append(view.getRight());
+ out.append(',');
+ out.append(view.getBottom());
+ int id = view.getId();
+ if (id != -1) {
+ out.append(" #");
+ out.append(Integer.toHexString(id));
+ Resources r = view.getResources();
+ if (id != 0 && r != null) {
+ switch ((-16777216) & id) {
+ case ViewCompat.MEASURED_STATE_TOO_SMALL /* 16777216 */:
+ pkgname = "android";
+ String typename = r.getResourceTypeName(id);
+ String entryname = r.getResourceEntryName(id);
+ out.append(" ");
+ out.append(pkgname);
+ out.append(":");
+ out.append(typename);
+ out.append("/");
+ out.append(entryname);
+ break;
+ case 2130706432:
+ pkgname = "app";
+ String typename2 = r.getResourceTypeName(id);
+ String entryname2 = r.getResourceEntryName(id);
+ out.append(" ");
+ out.append(pkgname);
+ out.append(":");
+ out.append(typename2);
+ out.append("/");
+ out.append(entryname2);
+ break;
+ default:
+ try {
+ pkgname = r.getResourcePackageName(id);
+ String typename22 = r.getResourceTypeName(id);
+ String entryname22 = r.getResourceEntryName(id);
+ out.append(" ");
+ out.append(pkgname);
+ out.append(":");
+ out.append(typename22);
+ out.append("/");
+ out.append(entryname22);
+ break;
+ } catch (Resources.NotFoundException e) {
+ break;
+ }
+ }
+ }
+ }
+ out.append("}");
+ return out.toString();
+ }
+
+ private void dumpViewHierarchy(String prefix, PrintWriter writer, View view) {
+ ViewGroup grp;
+ int N;
+ writer.print(prefix);
+ if (view == null) {
+ writer.println("null");
+ return;
+ }
+ writer.println(viewToString(view));
+ if ((view instanceof ViewGroup) && (N = (grp = (ViewGroup) view).getChildCount()) > 0) {
+ String prefix2 = prefix + " ";
+ for (int i = 0; i < N; i++) {
+ dumpViewHierarchy(prefix2, writer, grp.getChildAt(i));
+ }
+ }
+ }
+
+ void doReallyStop(boolean retaining) {
+ if (!this.mReallyStopped) {
+ this.mReallyStopped = true;
+ this.mRetaining = retaining;
+ this.mHandler.removeMessages(1);
+ onReallyStop();
+ }
+ }
+
+ void onReallyStop() {
+ if (this.mLoadersStarted) {
+ this.mLoadersStarted = false;
+ if (this.mLoaderManager != null) {
+ if (!this.mRetaining) {
+ this.mLoaderManager.doStop();
+ } else {
+ this.mLoaderManager.doRetain();
+ }
+ }
+ }
+ this.mFragments.dispatchReallyStop();
+ }
+
+ public void onAttachFragment(Fragment fragment) {
+ }
+
+ public FragmentManager getSupportFragmentManager() {
+ return this.mFragments;
+ }
+
+ @Override // android.app.Activity
+ public void startActivityForResult(Intent intent, int requestCode) {
+ if (requestCode != -1 && ((-65536) & requestCode) != 0) {
+ throw new IllegalArgumentException("Can only use lower 16 bits for requestCode");
+ }
+ super.startActivityForResult(intent, requestCode);
+ }
+
+ public void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) {
+ if (requestCode == -1) {
+ super.startActivityForResult(intent, -1);
+ } else {
+ if (((-65536) & requestCode) != 0) {
+ throw new IllegalArgumentException("Can only use lower 16 bits for requestCode");
+ }
+ super.startActivityForResult(intent, ((fragment.mIndex + 1) << 16) + (65535 & requestCode));
+ }
+ }
+
+ void invalidateSupportFragment(String who) {
+ LoaderManagerImpl lm;
+ if (this.mAllLoaderManagers != null && (lm = this.mAllLoaderManagers.get(who)) != null && !lm.mRetaining) {
+ lm.doDestroy();
+ this.mAllLoaderManagers.remove(who);
+ }
+ }
+
+ public LoaderManager getSupportLoaderManager() {
+ if (this.mLoaderManager != null) {
+ return this.mLoaderManager;
+ }
+ this.mCheckedForLoaderManager = true;
+ this.mLoaderManager = getLoaderManager("(root)", this.mLoadersStarted, true);
+ return this.mLoaderManager;
+ }
+
+ LoaderManagerImpl getLoaderManager(String who, boolean started, boolean create) {
+ if (this.mAllLoaderManagers == null) {
+ this.mAllLoaderManagers = new SimpleArrayMap<>();
+ }
+ LoaderManagerImpl lm = this.mAllLoaderManagers.get(who);
+ if (lm == null) {
+ if (create) {
+ LoaderManagerImpl lm2 = new LoaderManagerImpl(who, this, started);
+ this.mAllLoaderManagers.put(who, lm2);
+ return lm2;
+ }
+ return lm;
+ }
+ lm.updateActivity(this);
+ return lm;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentContainer.java b/apk/sources/android/support/v4/app/FragmentContainer.java
new file mode 100644
index 0000000..16f6d1d
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentContainer.java
@@ -0,0 +1,9 @@
+package android.support.v4.app;
+
+import android.view.View;
+
+/* compiled from: FragmentManager.java */
+/* loaded from: classes.dex */
+interface FragmentContainer {
+ View findViewById(int i);
+}
diff --git a/apk/sources/android/support/v4/app/FragmentManager.java b/apk/sources/android/support/v4/app/FragmentManager.java
new file mode 100644
index 0000000..27c1fe6
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentManager.java
@@ -0,0 +1,77 @@
+package android.support.v4.app;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.List;
+
+/* loaded from: classes.dex */
+public abstract class FragmentManager {
+ public static final int POP_BACK_STACK_INCLUSIVE = 1;
+
+ public interface BackStackEntry {
+ CharSequence getBreadCrumbShortTitle();
+
+ int getBreadCrumbShortTitleRes();
+
+ CharSequence getBreadCrumbTitle();
+
+ int getBreadCrumbTitleRes();
+
+ int getId();
+
+ String getName();
+ }
+
+ public interface OnBackStackChangedListener {
+ void onBackStackChanged();
+ }
+
+ public abstract void addOnBackStackChangedListener(OnBackStackChangedListener onBackStackChangedListener);
+
+ public abstract FragmentTransaction beginTransaction();
+
+ public abstract void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr);
+
+ public abstract boolean executePendingTransactions();
+
+ public abstract Fragment findFragmentById(int i);
+
+ public abstract Fragment findFragmentByTag(String str);
+
+ public abstract BackStackEntry getBackStackEntryAt(int i);
+
+ public abstract int getBackStackEntryCount();
+
+ public abstract Fragment getFragment(Bundle bundle, String str);
+
+ public abstract List getFragments();
+
+ public abstract void popBackStack();
+
+ public abstract void popBackStack(int i, int i2);
+
+ public abstract void popBackStack(String str, int i);
+
+ public abstract boolean popBackStackImmediate();
+
+ public abstract boolean popBackStackImmediate(int i, int i2);
+
+ public abstract boolean popBackStackImmediate(String str, int i);
+
+ public abstract void putFragment(Bundle bundle, String str, Fragment fragment);
+
+ public abstract void removeOnBackStackChangedListener(OnBackStackChangedListener onBackStackChangedListener);
+
+ public abstract Fragment.SavedState saveFragmentInstanceState(Fragment fragment);
+
+ @Deprecated
+ public FragmentTransaction openTransaction() {
+ return beginTransaction();
+ }
+
+ public static void enableDebugLogging(boolean enabled) {
+ FragmentManagerImpl.DEBUG = enabled;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentManagerImpl.java b/apk/sources/android/support/v4/app/FragmentManagerImpl.java
new file mode 100644
index 0000000..5081d54
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentManagerImpl.java
@@ -0,0 +1,1463 @@
+package android.support.v4.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Parcelable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.util.DebugUtils;
+import android.support.v4.util.LogWriter;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.AnimationUtils;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.ScaleAnimation;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/* compiled from: FragmentManager.java */
+/* loaded from: classes.dex */
+final class FragmentManagerImpl extends FragmentManager {
+ static final Interpolator ACCELERATE_CUBIC;
+ static final Interpolator ACCELERATE_QUINT;
+ static final int ANIM_DUR = 220;
+ public static final int ANIM_STYLE_CLOSE_ENTER = 3;
+ public static final int ANIM_STYLE_CLOSE_EXIT = 4;
+ public static final int ANIM_STYLE_FADE_ENTER = 5;
+ public static final int ANIM_STYLE_FADE_EXIT = 6;
+ public static final int ANIM_STYLE_OPEN_ENTER = 1;
+ public static final int ANIM_STYLE_OPEN_EXIT = 2;
+ static boolean DEBUG = false;
+ static final Interpolator DECELERATE_CUBIC;
+ static final Interpolator DECELERATE_QUINT;
+ static final boolean HONEYCOMB;
+ static final String TAG = "FragmentManager";
+ static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state";
+ static final String TARGET_STATE_TAG = "android:target_state";
+ static final String USER_VISIBLE_HINT_TAG = "android:user_visible_hint";
+ static final String VIEW_STATE_TAG = "android:view_state";
+ ArrayList mActive;
+ FragmentActivity mActivity;
+ ArrayList mAdded;
+ ArrayList mAvailBackStackIndices;
+ ArrayList mAvailIndices;
+ ArrayList mBackStack;
+ ArrayList mBackStackChangeListeners;
+ ArrayList mBackStackIndices;
+ FragmentContainer mContainer;
+ ArrayList mCreatedMenus;
+ boolean mDestroyed;
+ boolean mExecutingActions;
+ boolean mHavePendingDeferredStart;
+ boolean mNeedMenuInvalidate;
+ String mNoTransactionsBecause;
+ Fragment mParent;
+ ArrayList mPendingActions;
+ boolean mStateSaved;
+ Runnable[] mTmpActions;
+ int mCurState = 0;
+ Bundle mStateBundle = null;
+ SparseArray mStateArray = null;
+ Runnable mExecCommit = new Runnable() { // from class: android.support.v4.app.FragmentManagerImpl.1
+ @Override // java.lang.Runnable
+ public void run() {
+ FragmentManagerImpl.this.execPendingActions();
+ }
+ };
+
+ FragmentManagerImpl() {
+ }
+
+ static {
+ HONEYCOMB = Build.VERSION.SDK_INT >= 11;
+ DECELERATE_QUINT = new DecelerateInterpolator(2.5f);
+ DECELERATE_CUBIC = new DecelerateInterpolator(1.5f);
+ ACCELERATE_QUINT = new AccelerateInterpolator(2.5f);
+ ACCELERATE_CUBIC = new AccelerateInterpolator(1.5f);
+ }
+
+ private void throwException(RuntimeException ex) {
+ Log.e(TAG, ex.getMessage());
+ Log.e(TAG, "Activity state:");
+ LogWriter logw = new LogWriter(TAG);
+ PrintWriter pw = new PrintWriter(logw);
+ if (this.mActivity != null) {
+ try {
+ this.mActivity.dump(" ", null, pw, new String[0]);
+ throw ex;
+ } catch (Exception e) {
+ Log.e(TAG, "Failed dumping state", e);
+ throw ex;
+ }
+ }
+ try {
+ dump(" ", null, pw, new String[0]);
+ throw ex;
+ } catch (Exception e2) {
+ Log.e(TAG, "Failed dumping state", e2);
+ throw ex;
+ }
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public FragmentTransaction beginTransaction() {
+ return new BackStackRecord(this);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public boolean executePendingTransactions() {
+ return execPendingActions();
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void popBackStack() {
+ enqueueAction(new Runnable() { // from class: android.support.v4.app.FragmentManagerImpl.2
+ @Override // java.lang.Runnable
+ public void run() {
+ FragmentManagerImpl.this.popBackStackState(FragmentManagerImpl.this.mActivity.mHandler, null, -1, 0);
+ }
+ }, false);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public boolean popBackStackImmediate() {
+ checkStateLoss();
+ executePendingTransactions();
+ return popBackStackState(this.mActivity.mHandler, null, -1, 0);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void popBackStack(final String name, final int flags) {
+ enqueueAction(new Runnable() { // from class: android.support.v4.app.FragmentManagerImpl.3
+ @Override // java.lang.Runnable
+ public void run() {
+ FragmentManagerImpl.this.popBackStackState(FragmentManagerImpl.this.mActivity.mHandler, name, -1, flags);
+ }
+ }, false);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public boolean popBackStackImmediate(String name, int flags) {
+ checkStateLoss();
+ executePendingTransactions();
+ return popBackStackState(this.mActivity.mHandler, name, -1, flags);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void popBackStack(final int id, final int flags) {
+ if (id < 0) {
+ throw new IllegalArgumentException("Bad id: " + id);
+ }
+ enqueueAction(new Runnable() { // from class: android.support.v4.app.FragmentManagerImpl.4
+ @Override // java.lang.Runnable
+ public void run() {
+ FragmentManagerImpl.this.popBackStackState(FragmentManagerImpl.this.mActivity.mHandler, null, id, flags);
+ }
+ }, false);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public boolean popBackStackImmediate(int id, int flags) {
+ checkStateLoss();
+ executePendingTransactions();
+ if (id < 0) {
+ throw new IllegalArgumentException("Bad id: " + id);
+ }
+ return popBackStackState(this.mActivity.mHandler, null, id, flags);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public int getBackStackEntryCount() {
+ if (this.mBackStack != null) {
+ return this.mBackStack.size();
+ }
+ return 0;
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public FragmentManager.BackStackEntry getBackStackEntryAt(int index) {
+ return this.mBackStack.get(index);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener) {
+ if (this.mBackStackChangeListeners == null) {
+ this.mBackStackChangeListeners = new ArrayList<>();
+ }
+ this.mBackStackChangeListeners.add(listener);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void removeOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener) {
+ if (this.mBackStackChangeListeners != null) {
+ this.mBackStackChangeListeners.remove(listener);
+ }
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void putFragment(Bundle bundle, String key, Fragment fragment) {
+ if (fragment.mIndex < 0) {
+ throwException(new IllegalStateException("Fragment " + fragment + " is not currently in the FragmentManager"));
+ }
+ bundle.putInt(key, fragment.mIndex);
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public Fragment getFragment(Bundle bundle, String key) {
+ int index = bundle.getInt(key, -1);
+ if (index == -1) {
+ return null;
+ }
+ if (index >= this.mActive.size()) {
+ throwException(new IllegalStateException("Fragement no longer exists for key " + key + ": index " + index));
+ }
+ Fragment f = this.mActive.get(index);
+ if (f == null) {
+ throwException(new IllegalStateException("Fragement no longer exists for key " + key + ": index " + index));
+ return f;
+ }
+ return f;
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public List getFragments() {
+ return this.mActive;
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public Fragment.SavedState saveFragmentInstanceState(Fragment fragment) {
+ Bundle result;
+ if (fragment.mIndex < 0) {
+ throwException(new IllegalStateException("Fragment " + fragment + " is not currently in the FragmentManager"));
+ }
+ if (fragment.mState <= 0 || (result = saveFragmentBasicState(fragment)) == null) {
+ return null;
+ }
+ return new Fragment.SavedState(result);
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("FragmentManager{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(" in ");
+ if (this.mParent != null) {
+ DebugUtils.buildShortClassTag(this.mParent, sb);
+ } else {
+ DebugUtils.buildShortClassTag(this.mActivity, sb);
+ }
+ sb.append("}}");
+ return sb.toString();
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ int N;
+ int N2;
+ int N3;
+ int N4;
+ int N5;
+ int N6;
+ String innerPrefix = prefix + " ";
+ if (this.mActive != null && (N6 = this.mActive.size()) > 0) {
+ writer.print(prefix);
+ writer.print("Active Fragments in ");
+ writer.print(Integer.toHexString(System.identityHashCode(this)));
+ writer.println(":");
+ for (int i = 0; i < N6; i++) {
+ Fragment f = this.mActive.get(i);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i);
+ writer.print(": ");
+ writer.println(f);
+ if (f != null) {
+ f.dump(innerPrefix, fd, writer, args);
+ }
+ }
+ }
+ if (this.mAdded != null && (N5 = this.mAdded.size()) > 0) {
+ writer.print(prefix);
+ writer.println("Added Fragments:");
+ for (int i2 = 0; i2 < N5; i2++) {
+ Fragment f2 = this.mAdded.get(i2);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i2);
+ writer.print(": ");
+ writer.println(f2.toString());
+ }
+ }
+ if (this.mCreatedMenus != null && (N4 = this.mCreatedMenus.size()) > 0) {
+ writer.print(prefix);
+ writer.println("Fragments Created Menus:");
+ for (int i3 = 0; i3 < N4; i3++) {
+ Fragment f3 = this.mCreatedMenus.get(i3);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i3);
+ writer.print(": ");
+ writer.println(f3.toString());
+ }
+ }
+ if (this.mBackStack != null && (N3 = this.mBackStack.size()) > 0) {
+ writer.print(prefix);
+ writer.println("Back Stack:");
+ for (int i4 = 0; i4 < N3; i4++) {
+ BackStackRecord bs = this.mBackStack.get(i4);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i4);
+ writer.print(": ");
+ writer.println(bs.toString());
+ bs.dump(innerPrefix, fd, writer, args);
+ }
+ }
+ synchronized (this) {
+ if (this.mBackStackIndices != null && (N2 = this.mBackStackIndices.size()) > 0) {
+ writer.print(prefix);
+ writer.println("Back Stack Indices:");
+ for (int i5 = 0; i5 < N2; i5++) {
+ BackStackRecord bs2 = this.mBackStackIndices.get(i5);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i5);
+ writer.print(": ");
+ writer.println(bs2);
+ }
+ }
+ if (this.mAvailBackStackIndices != null && this.mAvailBackStackIndices.size() > 0) {
+ writer.print(prefix);
+ writer.print("mAvailBackStackIndices: ");
+ writer.println(Arrays.toString(this.mAvailBackStackIndices.toArray()));
+ }
+ }
+ if (this.mPendingActions != null && (N = this.mPendingActions.size()) > 0) {
+ writer.print(prefix);
+ writer.println("Pending Actions:");
+ for (int i6 = 0; i6 < N; i6++) {
+ Runnable r = this.mPendingActions.get(i6);
+ writer.print(prefix);
+ writer.print(" #");
+ writer.print(i6);
+ writer.print(": ");
+ writer.println(r);
+ }
+ }
+ writer.print(prefix);
+ writer.println("FragmentManager misc state:");
+ writer.print(prefix);
+ writer.print(" mActivity=");
+ writer.println(this.mActivity);
+ writer.print(prefix);
+ writer.print(" mContainer=");
+ writer.println(this.mContainer);
+ if (this.mParent != null) {
+ writer.print(prefix);
+ writer.print(" mParent=");
+ writer.println(this.mParent);
+ }
+ writer.print(prefix);
+ writer.print(" mCurState=");
+ writer.print(this.mCurState);
+ writer.print(" mStateSaved=");
+ writer.print(this.mStateSaved);
+ writer.print(" mDestroyed=");
+ writer.println(this.mDestroyed);
+ if (this.mNeedMenuInvalidate) {
+ writer.print(prefix);
+ writer.print(" mNeedMenuInvalidate=");
+ writer.println(this.mNeedMenuInvalidate);
+ }
+ if (this.mNoTransactionsBecause != null) {
+ writer.print(prefix);
+ writer.print(" mNoTransactionsBecause=");
+ writer.println(this.mNoTransactionsBecause);
+ }
+ if (this.mAvailIndices != null && this.mAvailIndices.size() > 0) {
+ writer.print(prefix);
+ writer.print(" mAvailIndices: ");
+ writer.println(Arrays.toString(this.mAvailIndices.toArray()));
+ }
+ }
+
+ static Animation makeOpenCloseAnimation(Context context, float startScale, float endScale, float startAlpha, float endAlpha) {
+ AnimationSet set = new AnimationSet(false);
+ ScaleAnimation scale = new ScaleAnimation(startScale, endScale, startScale, endScale, 1, 0.5f, 1, 0.5f);
+ scale.setInterpolator(DECELERATE_QUINT);
+ scale.setDuration(220L);
+ set.addAnimation(scale);
+ AlphaAnimation alpha = new AlphaAnimation(startAlpha, endAlpha);
+ alpha.setInterpolator(DECELERATE_CUBIC);
+ alpha.setDuration(220L);
+ set.addAnimation(alpha);
+ return set;
+ }
+
+ static Animation makeFadeAnimation(Context context, float start, float end) {
+ AlphaAnimation anim = new AlphaAnimation(start, end);
+ anim.setInterpolator(DECELERATE_CUBIC);
+ anim.setDuration(220L);
+ return anim;
+ }
+
+ Animation loadAnimation(Fragment fragment, int transit, boolean enter, int transitionStyle) throws Resources.NotFoundException {
+ int styleIndex;
+ Animation anim;
+ Animation animObj = fragment.onCreateAnimation(transit, enter, fragment.mNextAnim);
+ if (animObj == null) {
+ if (fragment.mNextAnim != 0 && (anim = AnimationUtils.loadAnimation(this.mActivity, fragment.mNextAnim)) != null) {
+ return anim;
+ }
+ if (transit != 0 && (styleIndex = transitToStyleIndex(transit, enter)) >= 0) {
+ switch (styleIndex) {
+ case 1:
+ return makeOpenCloseAnimation(this.mActivity, 1.125f, 1.0f, 0.0f, 1.0f);
+ case 2:
+ return makeOpenCloseAnimation(this.mActivity, 1.0f, 0.975f, 1.0f, 0.0f);
+ case 3:
+ return makeOpenCloseAnimation(this.mActivity, 0.975f, 1.0f, 0.0f, 1.0f);
+ case 4:
+ return makeOpenCloseAnimation(this.mActivity, 1.0f, 1.075f, 1.0f, 0.0f);
+ case 5:
+ return makeFadeAnimation(this.mActivity, 0.0f, 1.0f);
+ case 6:
+ return makeFadeAnimation(this.mActivity, 1.0f, 0.0f);
+ default:
+ if (transitionStyle == 0 && this.mActivity.getWindow() != null) {
+ transitionStyle = this.mActivity.getWindow().getAttributes().windowAnimations;
+ }
+ return transitionStyle == 0 ? null : null;
+ }
+ }
+ return null;
+ }
+ return animObj;
+ }
+
+ public void performPendingDeferredStart(Fragment f) throws Resources.NotFoundException {
+ if (f.mDeferStart) {
+ if (this.mExecutingActions) {
+ this.mHavePendingDeferredStart = true;
+ } else {
+ f.mDeferStart = false;
+ moveToState(f, this.mCurState, 0, 0, false);
+ }
+ }
+ }
+
+ /* JADX WARN: Can't fix incorrect switch cases order, some code will duplicate */
+ /* JADX WARN: Removed duplicated region for block: B:120:0x0261 */
+ /* JADX WARN: Removed duplicated region for block: B:136:0x02a2 */
+ /* JADX WARN: Removed duplicated region for block: B:142:0x02c4 */
+ /* JADX WARN: Removed duplicated region for block: B:148:0x02e6 */
+ /*
+ Code decompiled incorrectly, please refer to instructions dump.
+ To view partially-correct code enable 'Show inconsistent code' option in preferences
+ */
+ void moveToState(final android.support.v4.app.Fragment r11, int r12, int r13, int r14, boolean r15) throws android.content.res.Resources.NotFoundException {
+ /*
+ Method dump skipped, instructions count: 978
+ To view this dump change 'Code comments level' option to 'DEBUG'
+ */
+ throw new UnsupportedOperationException("Method not decompiled: android.support.v4.app.FragmentManagerImpl.moveToState(android.support.v4.app.Fragment, int, int, int, boolean):void");
+ }
+
+ void moveToState(Fragment f) {
+ moveToState(f, this.mCurState, 0, 0, false);
+ }
+
+ void moveToState(int newState, boolean always) {
+ moveToState(newState, 0, 0, always);
+ }
+
+ void moveToState(int newState, int transit, int transitStyle, boolean always) {
+ if (this.mActivity == null && newState != 0) {
+ throw new IllegalStateException("No activity");
+ }
+ if (always || this.mCurState != newState) {
+ this.mCurState = newState;
+ if (this.mActive != null) {
+ boolean loadersRunning = false;
+ for (int i = 0; i < this.mActive.size(); i++) {
+ Fragment f = this.mActive.get(i);
+ if (f != null) {
+ moveToState(f, newState, transit, transitStyle, false);
+ if (f.mLoaderManager != null) {
+ loadersRunning |= f.mLoaderManager.hasRunningLoaders();
+ }
+ }
+ }
+ if (!loadersRunning) {
+ startPendingDeferredFragments();
+ }
+ if (this.mNeedMenuInvalidate && this.mActivity != null && this.mCurState == 5) {
+ this.mActivity.supportInvalidateOptionsMenu();
+ this.mNeedMenuInvalidate = false;
+ }
+ }
+ }
+ }
+
+ void startPendingDeferredFragments() throws Resources.NotFoundException {
+ if (this.mActive != null) {
+ for (int i = 0; i < this.mActive.size(); i++) {
+ Fragment f = this.mActive.get(i);
+ if (f != null) {
+ performPendingDeferredStart(f);
+ }
+ }
+ }
+ }
+
+ void makeActive(Fragment f) {
+ if (f.mIndex < 0) {
+ if (this.mAvailIndices == null || this.mAvailIndices.size() <= 0) {
+ if (this.mActive == null) {
+ this.mActive = new ArrayList<>();
+ }
+ f.setIndex(this.mActive.size(), this.mParent);
+ this.mActive.add(f);
+ } else {
+ f.setIndex(this.mAvailIndices.remove(this.mAvailIndices.size() - 1).intValue(), this.mParent);
+ this.mActive.set(f.mIndex, f);
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Allocated fragment index " + f);
+ }
+ }
+ }
+
+ void makeInactive(Fragment f) {
+ if (f.mIndex >= 0) {
+ if (DEBUG) {
+ Log.v(TAG, "Freeing fragment index " + f);
+ }
+ this.mActive.set(f.mIndex, null);
+ if (this.mAvailIndices == null) {
+ this.mAvailIndices = new ArrayList<>();
+ }
+ this.mAvailIndices.add(Integer.valueOf(f.mIndex));
+ this.mActivity.invalidateSupportFragment(f.mWho);
+ f.initState();
+ }
+ }
+
+ public void addFragment(Fragment fragment, boolean moveToStateNow) {
+ if (this.mAdded == null) {
+ this.mAdded = new ArrayList<>();
+ }
+ if (DEBUG) {
+ Log.v(TAG, "add: " + fragment);
+ }
+ makeActive(fragment);
+ if (!fragment.mDetached) {
+ if (this.mAdded.contains(fragment)) {
+ throw new IllegalStateException("Fragment already added: " + fragment);
+ }
+ this.mAdded.add(fragment);
+ fragment.mAdded = true;
+ fragment.mRemoving = false;
+ if (fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ if (moveToStateNow) {
+ moveToState(fragment);
+ }
+ }
+ }
+
+ public void removeFragment(Fragment fragment, int transition, int transitionStyle) {
+ if (DEBUG) {
+ Log.v(TAG, "remove: " + fragment + " nesting=" + fragment.mBackStackNesting);
+ }
+ boolean inactive = !fragment.isInBackStack();
+ if (!fragment.mDetached || inactive) {
+ if (this.mAdded != null) {
+ this.mAdded.remove(fragment);
+ }
+ if (fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ fragment.mAdded = false;
+ fragment.mRemoving = true;
+ moveToState(fragment, inactive ? 0 : 1, transition, transitionStyle, false);
+ }
+ }
+
+ public void hideFragment(Fragment fragment, int transition, int transitionStyle) {
+ if (DEBUG) {
+ Log.v(TAG, "hide: " + fragment);
+ }
+ if (!fragment.mHidden) {
+ fragment.mHidden = true;
+ if (fragment.mView != null) {
+ Animation anim = loadAnimation(fragment, transition, false, transitionStyle);
+ if (anim != null) {
+ fragment.mView.startAnimation(anim);
+ }
+ fragment.mView.setVisibility(8);
+ }
+ if (fragment.mAdded && fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ fragment.onHiddenChanged(true);
+ }
+ }
+
+ public void showFragment(Fragment fragment, int transition, int transitionStyle) {
+ if (DEBUG) {
+ Log.v(TAG, "show: " + fragment);
+ }
+ if (fragment.mHidden) {
+ fragment.mHidden = false;
+ if (fragment.mView != null) {
+ Animation anim = loadAnimation(fragment, transition, true, transitionStyle);
+ if (anim != null) {
+ fragment.mView.startAnimation(anim);
+ }
+ fragment.mView.setVisibility(0);
+ }
+ if (fragment.mAdded && fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ fragment.onHiddenChanged(false);
+ }
+ }
+
+ public void detachFragment(Fragment fragment, int transition, int transitionStyle) {
+ if (DEBUG) {
+ Log.v(TAG, "detach: " + fragment);
+ }
+ if (!fragment.mDetached) {
+ fragment.mDetached = true;
+ if (fragment.mAdded) {
+ if (this.mAdded != null) {
+ if (DEBUG) {
+ Log.v(TAG, "remove from detach: " + fragment);
+ }
+ this.mAdded.remove(fragment);
+ }
+ if (fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ fragment.mAdded = false;
+ moveToState(fragment, 1, transition, transitionStyle, false);
+ }
+ }
+ }
+
+ public void attachFragment(Fragment fragment, int transition, int transitionStyle) {
+ if (DEBUG) {
+ Log.v(TAG, "attach: " + fragment);
+ }
+ if (fragment.mDetached) {
+ fragment.mDetached = false;
+ if (!fragment.mAdded) {
+ if (this.mAdded == null) {
+ this.mAdded = new ArrayList<>();
+ }
+ if (this.mAdded.contains(fragment)) {
+ throw new IllegalStateException("Fragment already added: " + fragment);
+ }
+ if (DEBUG) {
+ Log.v(TAG, "add from attach: " + fragment);
+ }
+ this.mAdded.add(fragment);
+ fragment.mAdded = true;
+ if (fragment.mHasMenu && fragment.mMenuVisible) {
+ this.mNeedMenuInvalidate = true;
+ }
+ moveToState(fragment, this.mCurState, transition, transitionStyle, false);
+ }
+ }
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public Fragment findFragmentById(int id) {
+ if (this.mAdded != null) {
+ for (int i = this.mAdded.size() - 1; i >= 0; i--) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && f.mFragmentId == id) {
+ return f;
+ }
+ }
+ }
+ if (this.mActive != null) {
+ for (int i2 = this.mActive.size() - 1; i2 >= 0; i2--) {
+ Fragment f2 = this.mActive.get(i2);
+ if (f2 != null && f2.mFragmentId == id) {
+ return f2;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override // android.support.v4.app.FragmentManager
+ public Fragment findFragmentByTag(String tag) {
+ if (this.mAdded != null && tag != null) {
+ for (int i = this.mAdded.size() - 1; i >= 0; i--) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && tag.equals(f.mTag)) {
+ return f;
+ }
+ }
+ }
+ if (this.mActive != null && tag != null) {
+ for (int i2 = this.mActive.size() - 1; i2 >= 0; i2--) {
+ Fragment f2 = this.mActive.get(i2);
+ if (f2 != null && tag.equals(f2.mTag)) {
+ return f2;
+ }
+ }
+ }
+ return null;
+ }
+
+ public Fragment findFragmentByWho(String who) {
+ Fragment f;
+ if (this.mActive != null && who != null) {
+ for (int i = this.mActive.size() - 1; i >= 0; i--) {
+ Fragment f2 = this.mActive.get(i);
+ if (f2 != null && (f = f2.findFragmentByWho(who)) != null) {
+ return f;
+ }
+ }
+ }
+ return null;
+ }
+
+ private void checkStateLoss() {
+ if (this.mStateSaved) {
+ throw new IllegalStateException("Can not perform this action after onSaveInstanceState");
+ }
+ if (this.mNoTransactionsBecause != null) {
+ throw new IllegalStateException("Can not perform this action inside of " + this.mNoTransactionsBecause);
+ }
+ }
+
+ public void enqueueAction(Runnable action, boolean allowStateLoss) {
+ if (!allowStateLoss) {
+ checkStateLoss();
+ }
+ synchronized (this) {
+ if (this.mDestroyed || this.mActivity == null) {
+ throw new IllegalStateException("Activity has been destroyed");
+ }
+ if (this.mPendingActions == null) {
+ this.mPendingActions = new ArrayList<>();
+ }
+ this.mPendingActions.add(action);
+ if (this.mPendingActions.size() == 1) {
+ this.mActivity.mHandler.removeCallbacks(this.mExecCommit);
+ this.mActivity.mHandler.post(this.mExecCommit);
+ }
+ }
+ }
+
+ public int allocBackStackIndex(BackStackRecord bse) {
+ synchronized (this) {
+ if (this.mAvailBackStackIndices == null || this.mAvailBackStackIndices.size() <= 0) {
+ if (this.mBackStackIndices == null) {
+ this.mBackStackIndices = new ArrayList<>();
+ }
+ int index = this.mBackStackIndices.size();
+ if (DEBUG) {
+ Log.v(TAG, "Setting back stack index " + index + " to " + bse);
+ }
+ this.mBackStackIndices.add(bse);
+ return index;
+ }
+ int index2 = this.mAvailBackStackIndices.remove(this.mAvailBackStackIndices.size() - 1).intValue();
+ if (DEBUG) {
+ Log.v(TAG, "Adding back stack index " + index2 + " with " + bse);
+ }
+ this.mBackStackIndices.set(index2, bse);
+ return index2;
+ }
+ }
+
+ public void setBackStackIndex(int index, BackStackRecord bse) {
+ synchronized (this) {
+ if (this.mBackStackIndices == null) {
+ this.mBackStackIndices = new ArrayList<>();
+ }
+ int N = this.mBackStackIndices.size();
+ if (index < N) {
+ if (DEBUG) {
+ Log.v(TAG, "Setting back stack index " + index + " to " + bse);
+ }
+ this.mBackStackIndices.set(index, bse);
+ } else {
+ while (N < index) {
+ this.mBackStackIndices.add(null);
+ if (this.mAvailBackStackIndices == null) {
+ this.mAvailBackStackIndices = new ArrayList<>();
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Adding available back stack index " + N);
+ }
+ this.mAvailBackStackIndices.add(Integer.valueOf(N));
+ N++;
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Adding back stack index " + index + " with " + bse);
+ }
+ this.mBackStackIndices.add(bse);
+ }
+ }
+ }
+
+ public void freeBackStackIndex(int index) {
+ synchronized (this) {
+ this.mBackStackIndices.set(index, null);
+ if (this.mAvailBackStackIndices == null) {
+ this.mAvailBackStackIndices = new ArrayList<>();
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Freeing back stack index " + index);
+ }
+ this.mAvailBackStackIndices.add(Integer.valueOf(index));
+ }
+ }
+
+ /* JADX WARN: Code restructure failed: missing block: B:35:0x0081, code lost:
+
+ r8.mExecutingActions = true;
+ r2 = 0;
+ */
+ /* JADX WARN: Code restructure failed: missing block: B:36:0x0085, code lost:
+
+ if (r2 >= r4) goto L49;
+ */
+ /* JADX WARN: Code restructure failed: missing block: B:37:0x0087, code lost:
+
+ r8.mTmpActions[r2].run();
+ r8.mTmpActions[r2] = null;
+ r2 = r2 + 1;
+ */
+ /*
+ Code decompiled incorrectly, please refer to instructions dump.
+ To view partially-correct code enable 'Show inconsistent code' option in preferences
+ */
+ public boolean execPendingActions() {
+ /*
+ r8 = this;
+ r7 = 0
+ boolean r5 = r8.mExecutingActions
+ if (r5 == 0) goto Ld
+ java.lang.IllegalStateException r5 = new java.lang.IllegalStateException
+ java.lang.String r6 = "Recursive entry to executePendingTransactions"
+ r5.(r6)
+ throw r5
+ Ld:
+ android.os.Looper r5 = android.os.Looper.myLooper()
+ android.support.v4.app.FragmentActivity r6 = r8.mActivity
+ android.os.Handler r6 = r6.mHandler
+ android.os.Looper r6 = r6.getLooper()
+ if (r5 == r6) goto L23
+ java.lang.IllegalStateException r5 = new java.lang.IllegalStateException
+ java.lang.String r6 = "Must be called from main thread of process"
+ r5.(r6)
+ throw r5
+ L23:
+ r0 = 0
+ L24:
+ monitor-enter(r8)
+ java.util.ArrayList r5 = r8.mPendingActions // Catch: java.lang.Throwable -> L96
+ if (r5 == 0) goto L31
+ java.util.ArrayList r5 = r8.mPendingActions // Catch: java.lang.Throwable -> L96
+ int r5 = r5.size() // Catch: java.lang.Throwable -> L96
+ if (r5 != 0) goto L58
+ L31:
+ monitor-exit(r8) // Catch: java.lang.Throwable -> L96
+ boolean r5 = r8.mHavePendingDeferredStart
+ if (r5 == 0) goto La4
+ r3 = 0
+ r2 = 0
+ L38:
+ java.util.ArrayList r5 = r8.mActive
+ int r5 = r5.size()
+ if (r2 >= r5) goto L9d
+ java.util.ArrayList r5 = r8.mActive
+ java.lang.Object r1 = r5.get(r2)
+ android.support.v4.app.Fragment r1 = (android.support.v4.app.Fragment) r1
+ if (r1 == 0) goto L55
+ android.support.v4.app.LoaderManagerImpl r5 = r1.mLoaderManager
+ if (r5 == 0) goto L55
+ android.support.v4.app.LoaderManagerImpl r5 = r1.mLoaderManager
+ boolean r5 = r5.hasRunningLoaders()
+ r3 = r3 | r5
+ L55:
+ int r2 = r2 + 1
+ goto L38
+ L58:
+ java.util.ArrayList r5 = r8.mPendingActions // Catch: java.lang.Throwable -> L96
+ int r4 = r5.size() // Catch: java.lang.Throwable -> L96
+ java.lang.Runnable[] r5 = r8.mTmpActions // Catch: java.lang.Throwable -> L96
+ if (r5 == 0) goto L67
+ java.lang.Runnable[] r5 = r8.mTmpActions // Catch: java.lang.Throwable -> L96
+ int r5 = r5.length // Catch: java.lang.Throwable -> L96
+ if (r5 >= r4) goto L6b
+ L67:
+ java.lang.Runnable[] r5 = new java.lang.Runnable[r4] // Catch: java.lang.Throwable -> L96
+ r8.mTmpActions = r5 // Catch: java.lang.Throwable -> L96
+ L6b:
+ java.util.ArrayList r5 = r8.mPendingActions // Catch: java.lang.Throwable -> L96
+ java.lang.Runnable[] r6 = r8.mTmpActions // Catch: java.lang.Throwable -> L96
+ r5.toArray(r6) // Catch: java.lang.Throwable -> L96
+ java.util.ArrayList r5 = r8.mPendingActions // Catch: java.lang.Throwable -> L96
+ r5.clear() // Catch: java.lang.Throwable -> L96
+ android.support.v4.app.FragmentActivity r5 = r8.mActivity // Catch: java.lang.Throwable -> L96
+ android.os.Handler r5 = r5.mHandler // Catch: java.lang.Throwable -> L96
+ java.lang.Runnable r6 = r8.mExecCommit // Catch: java.lang.Throwable -> L96
+ r5.removeCallbacks(r6) // Catch: java.lang.Throwable -> L96
+ monitor-exit(r8) // Catch: java.lang.Throwable -> L96
+ r5 = 1
+ r8.mExecutingActions = r5
+ r2 = 0
+ L85:
+ if (r2 >= r4) goto L99
+ java.lang.Runnable[] r5 = r8.mTmpActions
+ r5 = r5[r2]
+ r5.run()
+ java.lang.Runnable[] r5 = r8.mTmpActions
+ r6 = 0
+ r5[r2] = r6
+ int r2 = r2 + 1
+ goto L85
+ L96:
+ r5 = move-exception
+ monitor-exit(r8) // Catch: java.lang.Throwable -> L96
+ throw r5
+ L99:
+ r8.mExecutingActions = r7
+ r0 = 1
+ goto L24
+ L9d:
+ if (r3 != 0) goto La4
+ r8.mHavePendingDeferredStart = r7
+ r8.startPendingDeferredFragments()
+ La4:
+ return r0
+ */
+ throw new UnsupportedOperationException("Method not decompiled: android.support.v4.app.FragmentManagerImpl.execPendingActions():boolean");
+ }
+
+ void reportBackStackChanged() {
+ if (this.mBackStackChangeListeners != null) {
+ for (int i = 0; i < this.mBackStackChangeListeners.size(); i++) {
+ this.mBackStackChangeListeners.get(i).onBackStackChanged();
+ }
+ }
+ }
+
+ void addBackStackState(BackStackRecord state) {
+ if (this.mBackStack == null) {
+ this.mBackStack = new ArrayList<>();
+ }
+ this.mBackStack.add(state);
+ reportBackStackChanged();
+ }
+
+ boolean popBackStackState(Handler handler, String name, int id, int flags) {
+ if (this.mBackStack == null) {
+ return false;
+ }
+ if (name == null && id < 0 && (flags & 1) == 0) {
+ int last = this.mBackStack.size() - 1;
+ if (last < 0) {
+ return false;
+ }
+ this.mBackStack.remove(last).popFromBackStack(true);
+ reportBackStackChanged();
+ } else {
+ int index = -1;
+ if (name != null || id >= 0) {
+ index = this.mBackStack.size() - 1;
+ while (index >= 0) {
+ BackStackRecord bss = this.mBackStack.get(index);
+ if ((name != null && name.equals(bss.getName())) || (id >= 0 && id == bss.mIndex)) {
+ break;
+ }
+ index--;
+ }
+ if (index < 0) {
+ return false;
+ }
+ if ((flags & 1) != 0) {
+ index--;
+ while (index >= 0) {
+ BackStackRecord bss2 = this.mBackStack.get(index);
+ if ((name == null || !name.equals(bss2.getName())) && (id < 0 || id != bss2.mIndex)) {
+ break;
+ }
+ index--;
+ }
+ }
+ }
+ if (index == this.mBackStack.size() - 1) {
+ return false;
+ }
+ ArrayList states = new ArrayList<>();
+ for (int i = this.mBackStack.size() - 1; i > index; i--) {
+ states.add(this.mBackStack.remove(i));
+ }
+ int LAST = states.size() - 1;
+ int i2 = 0;
+ while (i2 <= LAST) {
+ if (DEBUG) {
+ Log.v(TAG, "Popping back stack state: " + states.get(i2));
+ }
+ states.get(i2).popFromBackStack(i2 == LAST);
+ i2++;
+ }
+ reportBackStackChanged();
+ }
+ return true;
+ }
+
+ ArrayList retainNonConfig() {
+ ArrayList fragments = null;
+ if (this.mActive != null) {
+ for (int i = 0; i < this.mActive.size(); i++) {
+ Fragment f = this.mActive.get(i);
+ if (f != null && f.mRetainInstance) {
+ if (fragments == null) {
+ fragments = new ArrayList<>();
+ }
+ fragments.add(f);
+ f.mRetaining = true;
+ f.mTargetIndex = f.mTarget != null ? f.mTarget.mIndex : -1;
+ if (DEBUG) {
+ Log.v(TAG, "retainNonConfig: keeping retained " + f);
+ }
+ }
+ }
+ }
+ return fragments;
+ }
+
+ void saveFragmentViewState(Fragment f) {
+ if (f.mInnerView != null) {
+ if (this.mStateArray == null) {
+ this.mStateArray = new SparseArray<>();
+ } else {
+ this.mStateArray.clear();
+ }
+ f.mInnerView.saveHierarchyState(this.mStateArray);
+ if (this.mStateArray.size() > 0) {
+ f.mSavedViewState = this.mStateArray;
+ this.mStateArray = null;
+ }
+ }
+ }
+
+ Bundle saveFragmentBasicState(Fragment f) {
+ Bundle result = null;
+ if (this.mStateBundle == null) {
+ this.mStateBundle = new Bundle();
+ }
+ f.performSaveInstanceState(this.mStateBundle);
+ if (!this.mStateBundle.isEmpty()) {
+ result = this.mStateBundle;
+ this.mStateBundle = null;
+ }
+ if (f.mView != null) {
+ saveFragmentViewState(f);
+ }
+ if (f.mSavedViewState != null) {
+ if (result == null) {
+ result = new Bundle();
+ }
+ result.putSparseParcelableArray(VIEW_STATE_TAG, f.mSavedViewState);
+ }
+ if (!f.mUserVisibleHint) {
+ if (result == null) {
+ result = new Bundle();
+ }
+ result.putBoolean(USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
+ }
+ return result;
+ }
+
+ Parcelable saveAllState() {
+ int N;
+ int N2;
+ execPendingActions();
+ if (HONEYCOMB) {
+ this.mStateSaved = true;
+ }
+ if (this.mActive == null || this.mActive.size() <= 0) {
+ return null;
+ }
+ int N3 = this.mActive.size();
+ FragmentState[] active = new FragmentState[N3];
+ boolean haveFragments = false;
+ for (int i = 0; i < N3; i++) {
+ Fragment f = this.mActive.get(i);
+ if (f != null) {
+ if (f.mIndex < 0) {
+ throwException(new IllegalStateException("Failure saving state: active " + f + " has cleared index: " + f.mIndex));
+ }
+ haveFragments = true;
+ FragmentState fs = new FragmentState(f);
+ active[i] = fs;
+ if (f.mState > 0 && fs.mSavedFragmentState == null) {
+ fs.mSavedFragmentState = saveFragmentBasicState(f);
+ if (f.mTarget != null) {
+ if (f.mTarget.mIndex < 0) {
+ throwException(new IllegalStateException("Failure saving state: " + f + " has target not in fragment manager: " + f.mTarget));
+ }
+ if (fs.mSavedFragmentState == null) {
+ fs.mSavedFragmentState = new Bundle();
+ }
+ putFragment(fs.mSavedFragmentState, TARGET_STATE_TAG, f.mTarget);
+ if (f.mTargetRequestCode != 0) {
+ fs.mSavedFragmentState.putInt(TARGET_REQUEST_CODE_STATE_TAG, f.mTargetRequestCode);
+ }
+ }
+ } else {
+ fs.mSavedFragmentState = f.mSavedFragmentState;
+ }
+ if (DEBUG) {
+ Log.v(TAG, "Saved state of " + f + ": " + fs.mSavedFragmentState);
+ }
+ }
+ }
+ if (!haveFragments) {
+ if (!DEBUG) {
+ return null;
+ }
+ Log.v(TAG, "saveAllState: no fragments!");
+ return null;
+ }
+ int[] added = null;
+ BackStackState[] backStack = null;
+ if (this.mAdded != null && (N2 = this.mAdded.size()) > 0) {
+ added = new int[N2];
+ for (int i2 = 0; i2 < N2; i2++) {
+ added[i2] = this.mAdded.get(i2).mIndex;
+ if (added[i2] < 0) {
+ throwException(new IllegalStateException("Failure saving state: active " + this.mAdded.get(i2) + " has cleared index: " + added[i2]));
+ }
+ if (DEBUG) {
+ Log.v(TAG, "saveAllState: adding fragment #" + i2 + ": " + this.mAdded.get(i2));
+ }
+ }
+ }
+ if (this.mBackStack != null && (N = this.mBackStack.size()) > 0) {
+ backStack = new BackStackState[N];
+ for (int i3 = 0; i3 < N; i3++) {
+ backStack[i3] = new BackStackState(this, this.mBackStack.get(i3));
+ if (DEBUG) {
+ Log.v(TAG, "saveAllState: adding back stack #" + i3 + ": " + this.mBackStack.get(i3));
+ }
+ }
+ }
+ FragmentManagerState fms = new FragmentManagerState();
+ fms.mActive = active;
+ fms.mAdded = added;
+ fms.mBackStack = backStack;
+ return fms;
+ }
+
+ void restoreAllState(Parcelable state, ArrayList nonConfig) {
+ if (state != null) {
+ FragmentManagerState fms = (FragmentManagerState) state;
+ if (fms.mActive != null) {
+ if (nonConfig != null) {
+ for (int i = 0; i < nonConfig.size(); i++) {
+ Fragment f = nonConfig.get(i);
+ if (DEBUG) {
+ Log.v(TAG, "restoreAllState: re-attaching retained " + f);
+ }
+ FragmentState fs = fms.mActive[f.mIndex];
+ fs.mInstance = f;
+ f.mSavedViewState = null;
+ f.mBackStackNesting = 0;
+ f.mInLayout = false;
+ f.mAdded = false;
+ f.mTarget = null;
+ if (fs.mSavedFragmentState != null) {
+ fs.mSavedFragmentState.setClassLoader(this.mActivity.getClassLoader());
+ f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray(VIEW_STATE_TAG);
+ }
+ }
+ }
+ this.mActive = new ArrayList<>(fms.mActive.length);
+ if (this.mAvailIndices != null) {
+ this.mAvailIndices.clear();
+ }
+ for (int i2 = 0; i2 < fms.mActive.length; i2++) {
+ FragmentState fs2 = fms.mActive[i2];
+ if (fs2 != null) {
+ Fragment f2 = fs2.instantiate(this.mActivity, this.mParent);
+ if (DEBUG) {
+ Log.v(TAG, "restoreAllState: active #" + i2 + ": " + f2);
+ }
+ this.mActive.add(f2);
+ fs2.mInstance = null;
+ } else {
+ this.mActive.add(null);
+ if (this.mAvailIndices == null) {
+ this.mAvailIndices = new ArrayList<>();
+ }
+ if (DEBUG) {
+ Log.v(TAG, "restoreAllState: avail #" + i2);
+ }
+ this.mAvailIndices.add(Integer.valueOf(i2));
+ }
+ }
+ if (nonConfig != null) {
+ for (int i3 = 0; i3 < nonConfig.size(); i3++) {
+ Fragment f3 = nonConfig.get(i3);
+ if (f3.mTargetIndex >= 0) {
+ if (f3.mTargetIndex < this.mActive.size()) {
+ f3.mTarget = this.mActive.get(f3.mTargetIndex);
+ } else {
+ Log.w(TAG, "Re-attaching retained fragment " + f3 + " target no longer exists: " + f3.mTargetIndex);
+ f3.mTarget = null;
+ }
+ }
+ }
+ }
+ if (fms.mAdded != null) {
+ this.mAdded = new ArrayList<>(fms.mAdded.length);
+ for (int i4 = 0; i4 < fms.mAdded.length; i4++) {
+ Fragment f4 = this.mActive.get(fms.mAdded[i4]);
+ if (f4 == null) {
+ throwException(new IllegalStateException("No instantiated fragment for index #" + fms.mAdded[i4]));
+ }
+ f4.mAdded = true;
+ if (DEBUG) {
+ Log.v(TAG, "restoreAllState: added #" + i4 + ": " + f4);
+ }
+ if (this.mAdded.contains(f4)) {
+ throw new IllegalStateException("Already added!");
+ }
+ this.mAdded.add(f4);
+ }
+ } else {
+ this.mAdded = null;
+ }
+ if (fms.mBackStack != null) {
+ this.mBackStack = new ArrayList<>(fms.mBackStack.length);
+ for (int i5 = 0; i5 < fms.mBackStack.length; i5++) {
+ BackStackRecord bse = fms.mBackStack[i5].instantiate(this);
+ if (DEBUG) {
+ Log.v(TAG, "restoreAllState: back stack #" + i5 + " (index " + bse.mIndex + "): " + bse);
+ LogWriter logw = new LogWriter(TAG);
+ PrintWriter pw = new PrintWriter(logw);
+ bse.dump(" ", pw, false);
+ }
+ this.mBackStack.add(bse);
+ if (bse.mIndex >= 0) {
+ setBackStackIndex(bse.mIndex, bse);
+ }
+ }
+ return;
+ }
+ this.mBackStack = null;
+ }
+ }
+ }
+
+ public void attachActivity(FragmentActivity activity, FragmentContainer container, Fragment parent) {
+ if (this.mActivity != null) {
+ throw new IllegalStateException("Already attached");
+ }
+ this.mActivity = activity;
+ this.mContainer = container;
+ this.mParent = parent;
+ }
+
+ public void noteStateNotSaved() {
+ this.mStateSaved = false;
+ }
+
+ public void dispatchCreate() {
+ this.mStateSaved = false;
+ moveToState(1, false);
+ }
+
+ public void dispatchActivityCreated() {
+ this.mStateSaved = false;
+ moveToState(2, false);
+ }
+
+ public void dispatchStart() {
+ this.mStateSaved = false;
+ moveToState(4, false);
+ }
+
+ public void dispatchResume() {
+ this.mStateSaved = false;
+ moveToState(5, false);
+ }
+
+ public void dispatchPause() {
+ moveToState(4, false);
+ }
+
+ public void dispatchStop() {
+ this.mStateSaved = true;
+ moveToState(3, false);
+ }
+
+ public void dispatchReallyStop() {
+ moveToState(2, false);
+ }
+
+ public void dispatchDestroyView() {
+ moveToState(1, false);
+ }
+
+ public void dispatchDestroy() {
+ this.mDestroyed = true;
+ execPendingActions();
+ moveToState(0, false);
+ this.mActivity = null;
+ this.mContainer = null;
+ this.mParent = null;
+ }
+
+ public void dispatchConfigurationChanged(Configuration newConfig) {
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null) {
+ f.performConfigurationChanged(newConfig);
+ }
+ }
+ }
+ }
+
+ public void dispatchLowMemory() {
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null) {
+ f.performLowMemory();
+ }
+ }
+ }
+ }
+
+ public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ boolean show = false;
+ ArrayList newMenus = null;
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && f.performCreateOptionsMenu(menu, inflater)) {
+ show = true;
+ if (newMenus == null) {
+ newMenus = new ArrayList<>();
+ }
+ newMenus.add(f);
+ }
+ }
+ }
+ if (this.mCreatedMenus != null) {
+ for (int i2 = 0; i2 < this.mCreatedMenus.size(); i2++) {
+ Fragment f2 = this.mCreatedMenus.get(i2);
+ if (newMenus == null || !newMenus.contains(f2)) {
+ f2.onDestroyOptionsMenu();
+ }
+ }
+ }
+ this.mCreatedMenus = newMenus;
+ return show;
+ }
+
+ public boolean dispatchPrepareOptionsMenu(Menu menu) {
+ boolean show = false;
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && f.performPrepareOptionsMenu(menu)) {
+ show = true;
+ }
+ }
+ }
+ return show;
+ }
+
+ public boolean dispatchOptionsItemSelected(MenuItem item) {
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && f.performOptionsItemSelected(item)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean dispatchContextItemSelected(MenuItem item) {
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null && f.performContextItemSelected(item)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public void dispatchOptionsMenuClosed(Menu menu) {
+ if (this.mAdded != null) {
+ for (int i = 0; i < this.mAdded.size(); i++) {
+ Fragment f = this.mAdded.get(i);
+ if (f != null) {
+ f.performOptionsMenuClosed(menu);
+ }
+ }
+ }
+ }
+
+ public static int reverseTransit(int transit) {
+ switch (transit) {
+ case FragmentTransaction.TRANSIT_FRAGMENT_OPEN /* 4097 */:
+ return FragmentTransaction.TRANSIT_FRAGMENT_CLOSE;
+ case FragmentTransaction.TRANSIT_FRAGMENT_FADE /* 4099 */:
+ return FragmentTransaction.TRANSIT_FRAGMENT_FADE;
+ case FragmentTransaction.TRANSIT_FRAGMENT_CLOSE /* 8194 */:
+ return FragmentTransaction.TRANSIT_FRAGMENT_OPEN;
+ default:
+ return 0;
+ }
+ }
+
+ public static int transitToStyleIndex(int transit, boolean enter) {
+ switch (transit) {
+ case FragmentTransaction.TRANSIT_FRAGMENT_OPEN /* 4097 */:
+ return enter ? 1 : 2;
+ case FragmentTransaction.TRANSIT_FRAGMENT_FADE /* 4099 */:
+ return enter ? 5 : 6;
+ case FragmentTransaction.TRANSIT_FRAGMENT_CLOSE /* 8194 */:
+ return enter ? 3 : 4;
+ default:
+ return -1;
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentManagerState.java b/apk/sources/android/support/v4/app/FragmentManagerState.java
new file mode 100644
index 0000000..d54f592
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentManagerState.java
@@ -0,0 +1,46 @@
+package android.support.v4.app;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/* compiled from: FragmentManager.java */
+/* loaded from: classes.dex */
+final class FragmentManagerState implements Parcelable {
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.app.FragmentManagerState.1
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public FragmentManagerState createFromParcel(Parcel in) {
+ return new FragmentManagerState(in);
+ }
+
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public FragmentManagerState[] newArray(int size) {
+ return new FragmentManagerState[size];
+ }
+ };
+ FragmentState[] mActive;
+ int[] mAdded;
+ BackStackState[] mBackStack;
+
+ public FragmentManagerState() {
+ }
+
+ public FragmentManagerState(Parcel in) {
+ this.mActive = (FragmentState[]) in.createTypedArray(FragmentState.CREATOR);
+ this.mAdded = in.createIntArray();
+ this.mBackStack = (BackStackState[]) in.createTypedArray(BackStackState.CREATOR);
+ }
+
+ @Override // android.os.Parcelable
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override // android.os.Parcelable
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeTypedArray(this.mActive, flags);
+ dest.writeIntArray(this.mAdded);
+ dest.writeTypedArray(this.mBackStack, flags);
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentPagerAdapter.java b/apk/sources/android/support/v4/app/FragmentPagerAdapter.java
new file mode 100644
index 0000000..5a426f5
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentPagerAdapter.java
@@ -0,0 +1,105 @@
+package android.support.v4.app;
+
+import android.content.res.Resources;
+import android.os.Parcelable;
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+
+/* loaded from: classes.dex */
+public abstract class FragmentPagerAdapter extends PagerAdapter {
+ private static final boolean DEBUG = false;
+ private static final String TAG = "FragmentPagerAdapter";
+ private FragmentTransaction mCurTransaction = null;
+ private Fragment mCurrentPrimaryItem = null;
+ private final FragmentManager mFragmentManager;
+
+ public abstract Fragment getItem(int i);
+
+ public FragmentPagerAdapter(FragmentManager fm) {
+ this.mFragmentManager = fm;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void startUpdate(ViewGroup container) {
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public Object instantiateItem(ViewGroup container, int position) throws Resources.NotFoundException {
+ if (this.mCurTransaction == null) {
+ this.mCurTransaction = this.mFragmentManager.beginTransaction();
+ }
+ long itemId = getItemId(position);
+ String name = makeFragmentName(container.getId(), itemId);
+ Fragment fragment = this.mFragmentManager.findFragmentByTag(name);
+ if (fragment != null) {
+ this.mCurTransaction.attach(fragment);
+ } else {
+ fragment = getItem(position);
+ this.mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));
+ }
+ if (fragment != this.mCurrentPrimaryItem) {
+ fragment.setMenuVisibility(DEBUG);
+ fragment.setUserVisibleHint(DEBUG);
+ }
+ return fragment;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ if (this.mCurTransaction == null) {
+ this.mCurTransaction = this.mFragmentManager.beginTransaction();
+ }
+ this.mCurTransaction.detach((Fragment) object);
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void setPrimaryItem(ViewGroup container, int position, Object object) throws Resources.NotFoundException {
+ Fragment fragment = (Fragment) object;
+ if (fragment != this.mCurrentPrimaryItem) {
+ if (this.mCurrentPrimaryItem != null) {
+ this.mCurrentPrimaryItem.setMenuVisibility(DEBUG);
+ this.mCurrentPrimaryItem.setUserVisibleHint(DEBUG);
+ }
+ if (fragment != null) {
+ fragment.setMenuVisibility(true);
+ fragment.setUserVisibleHint(true);
+ }
+ this.mCurrentPrimaryItem = fragment;
+ }
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void finishUpdate(ViewGroup container) {
+ if (this.mCurTransaction != null) {
+ this.mCurTransaction.commitAllowingStateLoss();
+ this.mCurTransaction = null;
+ this.mFragmentManager.executePendingTransactions();
+ }
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public boolean isViewFromObject(View view, Object object) {
+ if (((Fragment) object).getView() == view) {
+ return true;
+ }
+ return DEBUG;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public Parcelable saveState() {
+ return null;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void restoreState(Parcelable state, ClassLoader loader) {
+ }
+
+ public long getItemId(int position) {
+ return position;
+ }
+
+ private static String makeFragmentName(int viewId, long id) {
+ return "android:switcher:" + viewId + ":" + id;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentState.java b/apk/sources/android/support/v4/app/FragmentState.java
new file mode 100644
index 0000000..b53f08f
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentState.java
@@ -0,0 +1,106 @@
+package android.support.v4.app;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/* compiled from: Fragment.java */
+/* loaded from: classes.dex */
+final class FragmentState implements Parcelable {
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.app.FragmentState.1
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public FragmentState createFromParcel(Parcel in) {
+ return new FragmentState(in);
+ }
+
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public FragmentState[] newArray(int size) {
+ return new FragmentState[size];
+ }
+ };
+ final Bundle mArguments;
+ final String mClassName;
+ final int mContainerId;
+ final boolean mDetached;
+ final int mFragmentId;
+ final boolean mFromLayout;
+ final int mIndex;
+ Fragment mInstance;
+ final boolean mRetainInstance;
+ Bundle mSavedFragmentState;
+ final String mTag;
+
+ public FragmentState(Fragment frag) {
+ this.mClassName = frag.getClass().getName();
+ this.mIndex = frag.mIndex;
+ this.mFromLayout = frag.mFromLayout;
+ this.mFragmentId = frag.mFragmentId;
+ this.mContainerId = frag.mContainerId;
+ this.mTag = frag.mTag;
+ this.mRetainInstance = frag.mRetainInstance;
+ this.mDetached = frag.mDetached;
+ this.mArguments = frag.mArguments;
+ }
+
+ public FragmentState(Parcel in) {
+ this.mClassName = in.readString();
+ this.mIndex = in.readInt();
+ this.mFromLayout = in.readInt() != 0;
+ this.mFragmentId = in.readInt();
+ this.mContainerId = in.readInt();
+ this.mTag = in.readString();
+ this.mRetainInstance = in.readInt() != 0;
+ this.mDetached = in.readInt() != 0;
+ this.mArguments = in.readBundle();
+ this.mSavedFragmentState = in.readBundle();
+ }
+
+ public Fragment instantiate(FragmentActivity activity, Fragment parent) {
+ if (this.mInstance != null) {
+ return this.mInstance;
+ }
+ if (this.mArguments != null) {
+ this.mArguments.setClassLoader(activity.getClassLoader());
+ }
+ this.mInstance = Fragment.instantiate(activity, this.mClassName, this.mArguments);
+ if (this.mSavedFragmentState != null) {
+ this.mSavedFragmentState.setClassLoader(activity.getClassLoader());
+ this.mInstance.mSavedFragmentState = this.mSavedFragmentState;
+ }
+ this.mInstance.setIndex(this.mIndex, parent);
+ this.mInstance.mFromLayout = this.mFromLayout;
+ this.mInstance.mRestored = true;
+ this.mInstance.mFragmentId = this.mFragmentId;
+ this.mInstance.mContainerId = this.mContainerId;
+ this.mInstance.mTag = this.mTag;
+ this.mInstance.mRetainInstance = this.mRetainInstance;
+ this.mInstance.mDetached = this.mDetached;
+ this.mInstance.mFragmentManager = activity.mFragments;
+ if (FragmentManagerImpl.DEBUG) {
+ Log.v("FragmentManager", "Instantiated fragment " + this.mInstance);
+ }
+ return this.mInstance;
+ }
+
+ @Override // android.os.Parcelable
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override // android.os.Parcelable
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(this.mClassName);
+ dest.writeInt(this.mIndex);
+ dest.writeInt(this.mFromLayout ? 1 : 0);
+ dest.writeInt(this.mFragmentId);
+ dest.writeInt(this.mContainerId);
+ dest.writeString(this.mTag);
+ dest.writeInt(this.mRetainInstance ? 1 : 0);
+ dest.writeInt(this.mDetached ? 1 : 0);
+ dest.writeBundle(this.mArguments);
+ dest.writeBundle(this.mSavedFragmentState);
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentStatePagerAdapter.java b/apk/sources/android/support/v4/app/FragmentStatePagerAdapter.java
new file mode 100644
index 0000000..382fec2
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentStatePagerAdapter.java
@@ -0,0 +1,157 @@
+package android.support.v4.app;
+
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.PagerAdapter;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import java.util.ArrayList;
+
+/* loaded from: classes.dex */
+public abstract class FragmentStatePagerAdapter extends PagerAdapter {
+ private static final boolean DEBUG = false;
+ private static final String TAG = "FragmentStatePagerAdapter";
+ private final FragmentManager mFragmentManager;
+ private FragmentTransaction mCurTransaction = null;
+ private ArrayList mSavedState = new ArrayList<>();
+ private ArrayList mFragments = new ArrayList<>();
+ private Fragment mCurrentPrimaryItem = null;
+
+ public abstract Fragment getItem(int i);
+
+ public FragmentStatePagerAdapter(FragmentManager fm) {
+ this.mFragmentManager = fm;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void startUpdate(ViewGroup container) {
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public Object instantiateItem(ViewGroup container, int position) throws Resources.NotFoundException {
+ Fragment.SavedState fss;
+ Fragment f;
+ if (this.mFragments.size() <= position || (f = this.mFragments.get(position)) == null) {
+ if (this.mCurTransaction == null) {
+ this.mCurTransaction = this.mFragmentManager.beginTransaction();
+ }
+ Fragment fragment = getItem(position);
+ if (this.mSavedState.size() > position && (fss = this.mSavedState.get(position)) != null) {
+ fragment.setInitialSavedState(fss);
+ }
+ while (this.mFragments.size() <= position) {
+ this.mFragments.add(null);
+ }
+ fragment.setMenuVisibility(DEBUG);
+ fragment.setUserVisibleHint(DEBUG);
+ this.mFragments.set(position, fragment);
+ this.mCurTransaction.add(container.getId(), fragment);
+ return fragment;
+ }
+ return f;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ Fragment fragment = (Fragment) object;
+ if (this.mCurTransaction == null) {
+ this.mCurTransaction = this.mFragmentManager.beginTransaction();
+ }
+ while (this.mSavedState.size() <= position) {
+ this.mSavedState.add(null);
+ }
+ this.mSavedState.set(position, this.mFragmentManager.saveFragmentInstanceState(fragment));
+ this.mFragments.set(position, null);
+ this.mCurTransaction.remove(fragment);
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void setPrimaryItem(ViewGroup container, int position, Object object) throws Resources.NotFoundException {
+ Fragment fragment = (Fragment) object;
+ if (fragment != this.mCurrentPrimaryItem) {
+ if (this.mCurrentPrimaryItem != null) {
+ this.mCurrentPrimaryItem.setMenuVisibility(DEBUG);
+ this.mCurrentPrimaryItem.setUserVisibleHint(DEBUG);
+ }
+ if (fragment != null) {
+ fragment.setMenuVisibility(true);
+ fragment.setUserVisibleHint(true);
+ }
+ this.mCurrentPrimaryItem = fragment;
+ }
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void finishUpdate(ViewGroup container) {
+ if (this.mCurTransaction != null) {
+ this.mCurTransaction.commitAllowingStateLoss();
+ this.mCurTransaction = null;
+ this.mFragmentManager.executePendingTransactions();
+ }
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public boolean isViewFromObject(View view, Object object) {
+ if (((Fragment) object).getView() == view) {
+ return true;
+ }
+ return DEBUG;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public Parcelable saveState() {
+ Bundle state = null;
+ if (this.mSavedState.size() > 0) {
+ state = new Bundle();
+ Fragment.SavedState[] fss = new Fragment.SavedState[this.mSavedState.size()];
+ this.mSavedState.toArray(fss);
+ state.putParcelableArray("states", fss);
+ }
+ for (int i = 0; i < this.mFragments.size(); i++) {
+ Fragment f = this.mFragments.get(i);
+ if (f != null) {
+ if (state == null) {
+ state = new Bundle();
+ }
+ String key = "f" + i;
+ this.mFragmentManager.putFragment(state, key, f);
+ }
+ }
+ return state;
+ }
+
+ @Override // android.support.v4.view.PagerAdapter
+ public void restoreState(Parcelable state, ClassLoader loader) throws NumberFormatException {
+ if (state != null) {
+ Bundle bundle = (Bundle) state;
+ bundle.setClassLoader(loader);
+ Parcelable[] fss = bundle.getParcelableArray("states");
+ this.mSavedState.clear();
+ this.mFragments.clear();
+ if (fss != null) {
+ for (Parcelable parcelable : fss) {
+ this.mSavedState.add((Fragment.SavedState) parcelable);
+ }
+ }
+ Iterable keys = bundle.keySet();
+ for (String key : keys) {
+ if (key.startsWith("f")) {
+ int index = Integer.parseInt(key.substring(1));
+ Fragment f = this.mFragmentManager.getFragment(bundle, key);
+ if (f != null) {
+ while (this.mFragments.size() <= index) {
+ this.mFragments.add(null);
+ }
+ f.setMenuVisibility(DEBUG);
+ this.mFragments.set(index, f);
+ } else {
+ Log.w(TAG, "Bad fragment at key " + key);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentTabHost.java b/apk/sources/android/support/v4/app/FragmentTabHost.java
new file mode 100644
index 0000000..187f848
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentTabHost.java
@@ -0,0 +1,277 @@
+package android.support.v4.app;
+
+import android.R;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.TabHost;
+import android.widget.TabWidget;
+import java.util.ArrayList;
+
+/* loaded from: classes.dex */
+public class FragmentTabHost extends TabHost implements TabHost.OnTabChangeListener {
+ private boolean mAttached;
+ private int mContainerId;
+ private Context mContext;
+ private FragmentManager mFragmentManager;
+ private TabInfo mLastTab;
+ private TabHost.OnTabChangeListener mOnTabChangeListener;
+ private FrameLayout mRealTabContent;
+ private final ArrayList mTabs;
+
+ static final class TabInfo {
+ private final Bundle args;
+ private final Class> clss;
+ private Fragment fragment;
+ private final String tag;
+
+ TabInfo(String _tag, Class> _class, Bundle _args) {
+ this.tag = _tag;
+ this.clss = _class;
+ this.args = _args;
+ }
+ }
+
+ static class DummyTabFactory implements TabHost.TabContentFactory {
+ private final Context mContext;
+
+ public DummyTabFactory(Context context) {
+ this.mContext = context;
+ }
+
+ @Override // android.widget.TabHost.TabContentFactory
+ public View createTabContent(String tag) {
+ View v = new View(this.mContext);
+ v.setMinimumWidth(0);
+ v.setMinimumHeight(0);
+ return v;
+ }
+ }
+
+ static class SavedState extends View.BaseSavedState {
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.app.FragmentTabHost.SavedState.1
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ /* JADX WARN: Can't rename method to resolve collision */
+ @Override // android.os.Parcelable.Creator
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ String curTab;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ this.curTab = in.readString();
+ }
+
+ @Override // android.view.View.BaseSavedState, android.view.AbsSavedState, android.os.Parcelable
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeString(this.curTab);
+ }
+
+ public String toString() {
+ return "FragmentTabHost.SavedState{" + Integer.toHexString(System.identityHashCode(this)) + " curTab=" + this.curTab + "}";
+ }
+ }
+
+ public FragmentTabHost(Context context) {
+ super(context, null);
+ this.mTabs = new ArrayList<>();
+ initFragmentTabHost(context, null);
+ }
+
+ public FragmentTabHost(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.mTabs = new ArrayList<>();
+ initFragmentTabHost(context, attrs);
+ }
+
+ private void initFragmentTabHost(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs, new int[]{R.attr.inflatedId}, 0, 0);
+ this.mContainerId = a.getResourceId(0, 0);
+ a.recycle();
+ super.setOnTabChangedListener(this);
+ }
+
+ private void ensureHierarchy(Context context) {
+ if (findViewById(R.id.tabs) == null) {
+ LinearLayout ll = new LinearLayout(context);
+ ll.setOrientation(1);
+ addView(ll, new FrameLayout.LayoutParams(-1, -1));
+ TabWidget tw = new TabWidget(context);
+ tw.setId(R.id.tabs);
+ tw.setOrientation(0);
+ ll.addView(tw, new LinearLayout.LayoutParams(-1, -2, 0.0f));
+ FrameLayout fl = new FrameLayout(context);
+ fl.setId(R.id.tabcontent);
+ ll.addView(fl, new LinearLayout.LayoutParams(0, 0, 0.0f));
+ FrameLayout fl2 = new FrameLayout(context);
+ this.mRealTabContent = fl2;
+ this.mRealTabContent.setId(this.mContainerId);
+ ll.addView(fl2, new LinearLayout.LayoutParams(-1, 0, 1.0f));
+ }
+ }
+
+ @Override // android.widget.TabHost
+ @Deprecated
+ public void setup() {
+ throw new IllegalStateException("Must call setup() that takes a Context and FragmentManager");
+ }
+
+ public void setup(Context context, FragmentManager manager) {
+ ensureHierarchy(context);
+ super.setup();
+ this.mContext = context;
+ this.mFragmentManager = manager;
+ ensureContent();
+ }
+
+ public void setup(Context context, FragmentManager manager, int containerId) {
+ ensureHierarchy(context);
+ super.setup();
+ this.mContext = context;
+ this.mFragmentManager = manager;
+ this.mContainerId = containerId;
+ ensureContent();
+ this.mRealTabContent.setId(containerId);
+ if (getId() == -1) {
+ setId(R.id.tabhost);
+ }
+ }
+
+ private void ensureContent() {
+ if (this.mRealTabContent == null) {
+ this.mRealTabContent = (FrameLayout) findViewById(this.mContainerId);
+ if (this.mRealTabContent == null) {
+ throw new IllegalStateException("No tab content FrameLayout found for id " + this.mContainerId);
+ }
+ }
+ }
+
+ @Override // android.widget.TabHost
+ public void setOnTabChangedListener(TabHost.OnTabChangeListener l) {
+ this.mOnTabChangeListener = l;
+ }
+
+ public void addTab(TabHost.TabSpec tabSpec, Class> clss, Bundle args) {
+ tabSpec.setContent(new DummyTabFactory(this.mContext));
+ String tag = tabSpec.getTag();
+ TabInfo info = new TabInfo(tag, clss, args);
+ if (this.mAttached) {
+ info.fragment = this.mFragmentManager.findFragmentByTag(tag);
+ if (info.fragment != null && !info.fragment.isDetached()) {
+ FragmentTransaction ft = this.mFragmentManager.beginTransaction();
+ ft.detach(info.fragment);
+ ft.commit();
+ }
+ }
+ this.mTabs.add(info);
+ addTab(tabSpec);
+ }
+
+ @Override // android.view.ViewGroup, android.view.View
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ String currentTab = getCurrentTabTag();
+ FragmentTransaction ft = null;
+ for (int i = 0; i < this.mTabs.size(); i++) {
+ TabInfo tab = this.mTabs.get(i);
+ tab.fragment = this.mFragmentManager.findFragmentByTag(tab.tag);
+ if (tab.fragment != null && !tab.fragment.isDetached()) {
+ if (tab.tag.equals(currentTab)) {
+ this.mLastTab = tab;
+ } else {
+ if (ft == null) {
+ ft = this.mFragmentManager.beginTransaction();
+ }
+ ft.detach(tab.fragment);
+ }
+ }
+ }
+ this.mAttached = true;
+ FragmentTransaction ft2 = doTabChanged(currentTab, ft);
+ if (ft2 != null) {
+ ft2.commit();
+ this.mFragmentManager.executePendingTransactions();
+ }
+ }
+
+ @Override // android.view.ViewGroup, android.view.View
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ this.mAttached = false;
+ }
+
+ @Override // android.view.View
+ protected Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+ ss.curTab = getCurrentTabTag();
+ return ss;
+ }
+
+ @Override // android.view.View
+ protected void onRestoreInstanceState(Parcelable state) {
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+ setCurrentTabByTag(ss.curTab);
+ }
+
+ @Override // android.widget.TabHost.OnTabChangeListener
+ public void onTabChanged(String tabId) {
+ FragmentTransaction ft;
+ if (this.mAttached && (ft = doTabChanged(tabId, null)) != null) {
+ ft.commit();
+ }
+ if (this.mOnTabChangeListener != null) {
+ this.mOnTabChangeListener.onTabChanged(tabId);
+ }
+ }
+
+ private FragmentTransaction doTabChanged(String tabId, FragmentTransaction ft) {
+ TabInfo newTab = null;
+ for (int i = 0; i < this.mTabs.size(); i++) {
+ TabInfo tab = this.mTabs.get(i);
+ if (tab.tag.equals(tabId)) {
+ newTab = tab;
+ }
+ }
+ if (newTab == null) {
+ throw new IllegalStateException("No tab known for tag " + tabId);
+ }
+ if (this.mLastTab != newTab) {
+ if (ft == null) {
+ ft = this.mFragmentManager.beginTransaction();
+ }
+ if (this.mLastTab != null && this.mLastTab.fragment != null) {
+ ft.detach(this.mLastTab.fragment);
+ }
+ if (newTab != null) {
+ if (newTab.fragment == null) {
+ newTab.fragment = Fragment.instantiate(this.mContext, newTab.clss.getName(), newTab.args);
+ ft.add(this.mContainerId, newTab.fragment, newTab.tag);
+ } else {
+ ft.attach(newTab.fragment);
+ }
+ }
+ this.mLastTab = newTab;
+ }
+ return ft;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/FragmentTransaction.java b/apk/sources/android/support/v4/app/FragmentTransaction.java
new file mode 100644
index 0000000..b0a7d6e
--- /dev/null
+++ b/apk/sources/android/support/v4/app/FragmentTransaction.java
@@ -0,0 +1,60 @@
+package android.support.v4.app;
+
+/* loaded from: classes.dex */
+public abstract class FragmentTransaction {
+ public static final int TRANSIT_ENTER_MASK = 4096;
+ public static final int TRANSIT_EXIT_MASK = 8192;
+ public static final int TRANSIT_FRAGMENT_CLOSE = 8194;
+ public static final int TRANSIT_FRAGMENT_FADE = 4099;
+ public static final int TRANSIT_FRAGMENT_OPEN = 4097;
+ public static final int TRANSIT_NONE = 0;
+ public static final int TRANSIT_UNSET = -1;
+
+ public abstract FragmentTransaction add(int i, Fragment fragment);
+
+ public abstract FragmentTransaction add(int i, Fragment fragment, String str);
+
+ public abstract FragmentTransaction add(Fragment fragment, String str);
+
+ public abstract FragmentTransaction addToBackStack(String str);
+
+ public abstract FragmentTransaction attach(Fragment fragment);
+
+ public abstract int commit();
+
+ public abstract int commitAllowingStateLoss();
+
+ public abstract FragmentTransaction detach(Fragment fragment);
+
+ public abstract FragmentTransaction disallowAddToBackStack();
+
+ public abstract FragmentTransaction hide(Fragment fragment);
+
+ public abstract boolean isAddToBackStackAllowed();
+
+ public abstract boolean isEmpty();
+
+ public abstract FragmentTransaction remove(Fragment fragment);
+
+ public abstract FragmentTransaction replace(int i, Fragment fragment);
+
+ public abstract FragmentTransaction replace(int i, Fragment fragment, String str);
+
+ public abstract FragmentTransaction setBreadCrumbShortTitle(int i);
+
+ public abstract FragmentTransaction setBreadCrumbShortTitle(CharSequence charSequence);
+
+ public abstract FragmentTransaction setBreadCrumbTitle(int i);
+
+ public abstract FragmentTransaction setBreadCrumbTitle(CharSequence charSequence);
+
+ public abstract FragmentTransaction setCustomAnimations(int i, int i2);
+
+ public abstract FragmentTransaction setCustomAnimations(int i, int i2, int i3, int i4);
+
+ public abstract FragmentTransaction setTransition(int i);
+
+ public abstract FragmentTransaction setTransitionStyle(int i);
+
+ public abstract FragmentTransaction show(Fragment fragment);
+}
diff --git a/apk/sources/android/support/v4/app/ListFragment.java b/apk/sources/android/support/v4/app/ListFragment.java
new file mode 100644
index 0000000..a2cbea6
--- /dev/null
+++ b/apk/sources/android/support/v4/app/ListFragment.java
@@ -0,0 +1,224 @@
+package android.support.v4.app;
+
+import android.R;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
+import android.widget.AdapterView;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+/* loaded from: classes.dex */
+public class ListFragment extends Fragment {
+ static final int INTERNAL_EMPTY_ID = 16711681;
+ static final int INTERNAL_LIST_CONTAINER_ID = 16711683;
+ static final int INTERNAL_PROGRESS_CONTAINER_ID = 16711682;
+ ListAdapter mAdapter;
+ CharSequence mEmptyText;
+ View mEmptyView;
+ ListView mList;
+ View mListContainer;
+ boolean mListShown;
+ View mProgressContainer;
+ TextView mStandardEmptyView;
+ private final Handler mHandler = new Handler();
+ private final Runnable mRequestFocus = new Runnable() { // from class: android.support.v4.app.ListFragment.1
+ @Override // java.lang.Runnable
+ public void run() {
+ ListFragment.this.mList.focusableViewAvailable(ListFragment.this.mList);
+ }
+ };
+ private final AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() { // from class: android.support.v4.app.ListFragment.2
+ @Override // android.widget.AdapterView.OnItemClickListener
+ public void onItemClick(AdapterView> parent, View v, int position, long id) {
+ ListFragment.this.onListItemClick((ListView) parent, v, position, id);
+ }
+ };
+
+ @Override // android.support.v4.app.Fragment
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ Context context = getActivity();
+ FrameLayout frameLayout = new FrameLayout(context);
+ LinearLayout pframe = new LinearLayout(context);
+ pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID);
+ pframe.setOrientation(1);
+ pframe.setVisibility(8);
+ pframe.setGravity(17);
+ ProgressBar progress = new ProgressBar(context, null, R.attr.progressBarStyleLarge);
+ pframe.addView(progress, new FrameLayout.LayoutParams(-2, -2));
+ frameLayout.addView(pframe, new FrameLayout.LayoutParams(-1, -1));
+ FrameLayout lframe = new FrameLayout(context);
+ lframe.setId(INTERNAL_LIST_CONTAINER_ID);
+ TextView tv = new TextView(getActivity());
+ tv.setId(INTERNAL_EMPTY_ID);
+ tv.setGravity(17);
+ lframe.addView(tv, new FrameLayout.LayoutParams(-1, -1));
+ ListView lv = new ListView(getActivity());
+ lv.setId(R.id.list);
+ lv.setDrawSelectorOnTop(false);
+ lframe.addView(lv, new FrameLayout.LayoutParams(-1, -1));
+ frameLayout.addView(lframe, new FrameLayout.LayoutParams(-1, -1));
+ frameLayout.setLayoutParams(new FrameLayout.LayoutParams(-1, -1));
+ return frameLayout;
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ ensureList();
+ }
+
+ @Override // android.support.v4.app.Fragment
+ public void onDestroyView() {
+ this.mHandler.removeCallbacks(this.mRequestFocus);
+ this.mList = null;
+ this.mListShown = false;
+ this.mListContainer = null;
+ this.mProgressContainer = null;
+ this.mEmptyView = null;
+ this.mStandardEmptyView = null;
+ super.onDestroyView();
+ }
+
+ public void onListItemClick(ListView l, View v, int position, long id) {
+ }
+
+ public void setListAdapter(ListAdapter adapter) {
+ boolean hadAdapter = this.mAdapter != null;
+ this.mAdapter = adapter;
+ if (this.mList != null) {
+ this.mList.setAdapter(adapter);
+ if (!this.mListShown && !hadAdapter) {
+ setListShown(true, getView().getWindowToken() != null);
+ }
+ }
+ }
+
+ public void setSelection(int position) {
+ ensureList();
+ this.mList.setSelection(position);
+ }
+
+ public int getSelectedItemPosition() {
+ ensureList();
+ return this.mList.getSelectedItemPosition();
+ }
+
+ public long getSelectedItemId() {
+ ensureList();
+ return this.mList.getSelectedItemId();
+ }
+
+ public ListView getListView() {
+ ensureList();
+ return this.mList;
+ }
+
+ public void setEmptyText(CharSequence text) {
+ ensureList();
+ if (this.mStandardEmptyView == null) {
+ throw new IllegalStateException("Can't be used with a custom content view");
+ }
+ this.mStandardEmptyView.setText(text);
+ if (this.mEmptyText == null) {
+ this.mList.setEmptyView(this.mStandardEmptyView);
+ }
+ this.mEmptyText = text;
+ }
+
+ public void setListShown(boolean shown) {
+ setListShown(shown, true);
+ }
+
+ public void setListShownNoAnimation(boolean shown) {
+ setListShown(shown, false);
+ }
+
+ private void setListShown(boolean shown, boolean animate) {
+ ensureList();
+ if (this.mProgressContainer == null) {
+ throw new IllegalStateException("Can't be used with a custom content view");
+ }
+ if (this.mListShown != shown) {
+ this.mListShown = shown;
+ if (shown) {
+ if (animate) {
+ this.mProgressContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out));
+ this.mListContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in));
+ } else {
+ this.mProgressContainer.clearAnimation();
+ this.mListContainer.clearAnimation();
+ }
+ this.mProgressContainer.setVisibility(8);
+ this.mListContainer.setVisibility(0);
+ return;
+ }
+ if (animate) {
+ this.mProgressContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in));
+ this.mListContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out));
+ } else {
+ this.mProgressContainer.clearAnimation();
+ this.mListContainer.clearAnimation();
+ }
+ this.mProgressContainer.setVisibility(0);
+ this.mListContainer.setVisibility(8);
+ }
+ }
+
+ public ListAdapter getListAdapter() {
+ return this.mAdapter;
+ }
+
+ private void ensureList() {
+ if (this.mList == null) {
+ View root = getView();
+ if (root == null) {
+ throw new IllegalStateException("Content view not yet created");
+ }
+ if (root instanceof ListView) {
+ this.mList = (ListView) root;
+ } else {
+ this.mStandardEmptyView = (TextView) root.findViewById(INTERNAL_EMPTY_ID);
+ if (this.mStandardEmptyView == null) {
+ this.mEmptyView = root.findViewById(R.id.empty);
+ } else {
+ this.mStandardEmptyView.setVisibility(8);
+ }
+ this.mProgressContainer = root.findViewById(INTERNAL_PROGRESS_CONTAINER_ID);
+ this.mListContainer = root.findViewById(INTERNAL_LIST_CONTAINER_ID);
+ View rawListView = root.findViewById(R.id.list);
+ if (!(rawListView instanceof ListView)) {
+ if (rawListView == null) {
+ throw new RuntimeException("Your content must have a ListView whose id attribute is 'android.R.id.list'");
+ }
+ throw new RuntimeException("Content has view with id attribute 'android.R.id.list' that is not a ListView class");
+ }
+ this.mList = (ListView) rawListView;
+ if (this.mEmptyView != null) {
+ this.mList.setEmptyView(this.mEmptyView);
+ } else if (this.mEmptyText != null) {
+ this.mStandardEmptyView.setText(this.mEmptyText);
+ this.mList.setEmptyView(this.mStandardEmptyView);
+ }
+ }
+ this.mListShown = true;
+ this.mList.setOnItemClickListener(this.mOnClickListener);
+ if (this.mAdapter != null) {
+ ListAdapter adapter = this.mAdapter;
+ this.mAdapter = null;
+ setListAdapter(adapter);
+ } else if (this.mProgressContainer != null) {
+ setListShown(false, false);
+ }
+ this.mHandler.post(this.mRequestFocus);
+ }
+ }
+}
diff --git a/apk/sources/android/support/v4/app/LoaderManager.java b/apk/sources/android/support/v4/app/LoaderManager.java
new file mode 100644
index 0000000..5b3465c
--- /dev/null
+++ b/apk/sources/android/support/v4/app/LoaderManager.java
@@ -0,0 +1,36 @@
+package android.support.v4.app;
+
+import android.os.Bundle;
+import android.support.v4.content.Loader;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/* loaded from: classes.dex */
+public abstract class LoaderManager {
+
+ public interface LoaderCallbacks {
+ Loader onCreateLoader(int i, Bundle bundle);
+
+ void onLoadFinished(Loader loader, D d);
+
+ void onLoaderReset(Loader loader);
+ }
+
+ public abstract void destroyLoader(int i);
+
+ public abstract void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr);
+
+ public abstract Loader getLoader(int i);
+
+ public abstract Loader initLoader(int i, Bundle bundle, LoaderCallbacks loaderCallbacks);
+
+ public abstract Loader restartLoader(int i, Bundle bundle, LoaderCallbacks loaderCallbacks);
+
+ public static void enableDebugLogging(boolean enabled) {
+ LoaderManagerImpl.DEBUG = enabled;
+ }
+
+ public boolean hasRunningLoaders() {
+ return false;
+ }
+}
diff --git a/apk/sources/android/support/v4/app/LoaderManagerImpl.java b/apk/sources/android/support/v4/app/LoaderManagerImpl.java
new file mode 100644
index 0000000..25580c4
--- /dev/null
+++ b/apk/sources/android/support/v4/app/LoaderManagerImpl.java
@@ -0,0 +1,588 @@
+package android.support.v4.app;
+
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.support.v4.util.DebugUtils;
+import android.support.v4.util.SparseArrayCompat;
+import android.util.Log;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.lang.reflect.Modifier;
+
+/* compiled from: LoaderManager.java */
+/* loaded from: classes.dex */
+class LoaderManagerImpl extends LoaderManager {
+ static boolean DEBUG = false;
+ static final String TAG = "LoaderManager";
+ FragmentActivity mActivity;
+ boolean mCreatingLoader;
+ boolean mRetaining;
+ boolean mRetainingStarted;
+ boolean mStarted;
+ final String mWho;
+ final SparseArrayCompat mLoaders = new SparseArrayCompat<>();
+ final SparseArrayCompat mInactiveLoaders = new SparseArrayCompat<>();
+
+ /* compiled from: LoaderManager.java */
+ final class LoaderInfo implements Loader.OnLoadCompleteListener